歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> sed實例備忘

sed實例備忘

日期:2017/3/1 15:29:34   编辑:關於Linux
sed實例備忘 需求: 修改所有automation script目錄下的build config file。每個feature下面都會有至少一個個build config file,文件名為:build.cfg, build_6.9.cfg ... 需要在每個build config file搜索 關鍵字:INCLUDE_PING 或 INCLUDE_PING6. 如果找到了關鍵字,則需要插入:INCLUDE_IPPING_CMD 或 INCLUDE_IPPING6_CMD 而關鍵字出現的位置可能有四種: 1. 開頭,但不是結尾: vip_components_t1 = "INCLUDE_PING \ 這種情況需要插入目標行到關鍵字行下面行即可; 目標效果: vip_components_t1 = "INCLUDE_PING \ INCLUDE_IPPING_CMD \ 2. 中間,非開頭非結尾: vip_components_t2 = "INCLUDE_SHELL \ INCLUDE_SHELL_INTERP_CMD \ INCLUDE_PING \ INCLUDE_PING6 \ INCLUDE_IPPING6_CMD" 這種情況,需要添加目標行到關鍵字上方或者上方都可以。 目標效果: vip_components_t2 = "INCLUDE_SHELL \ INCLUDE_SHELL_INTERP_CMD \ INCLUDE_PING \ INCLUDE_IPPING_CMD \ INCLUDE_PING6 \ INCLUDE_IPPING6_CMD \ INCLUDE_IPPING6_CMD" 3. 結尾。 vip_components_t2 = "INCLUDE_SHELL \ INCLUDE_SHELL_INTERP_CMD \ INCLUDE_PING" 這種情況,需要添加目標行到關鍵字行的上一行。 目標效果: vip_components_t2 = "INCLUDE_SHELL \ INCLUDE_SHELL_INTERP_CMD \ INCLUDE_IPPING_CMD \ INCLUDE_PING" 4. 開頭,同時也是結尾 vip_components_t2 = "INCLUDE_PING" 這種情況稍微復雜一些,需要插入目標行到關鍵字行下方,同時關鍵字之後的雙引號也要替換成反斜線。 目標效果: vip_components_t2 = "INCLUDE_PING \ INCLUDE_IPPING_CMD" 解決方案: 分析之後,其實情況1, 2都可以用一個sed表達式解決,情況3 需要另外寫一個表達式。 由於情況4的case很少,而且稍微復雜一些,沒有用sed解決(留著以後思考) sed 表達式: find . -name "build*.cfg" |xargs sed -e '/INCLUDE_PING\>\s*\\/a\ INCLUDE_IPPING_CMD\ \\' -e '/INCLUDE_PING6\>\s*\\/a\ INCLUDE_IPPING6_CMD\ \\' -e '/[^\"]\s*INCLUDE_PING\>\s*\"/i\ INCLUDE_IPPING_CMD\ \\' -e '/[^\"]\s*INCLUDE_PING6\>\s*\"/i\ INCLUDE_IPPING6_CMD\ \\' -i 該表達式解決了情況1,2,3, 為了解決情況4: find . -name "build*.cfg" |xargs grep -niHr \"INCLUDE_PING\" 然後根據搜索出來的文件名,分別手動修改(笨方法)。
Copyright © Linux教程網 All Rights Reserved