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\"
 
然后根据搜索出来的文件名,分别手动修改(笨方法)。
 

相关内容

    暂无相关文章