知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

sed实例备忘

发布时间:2014-09-05 14:04:31作者:知识屋

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/"
 
然后根据搜索出来的文件名,分别手动修改(笨方法)。
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜