歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

sed實例備忘

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