食戟之灵175:如何用好你的sed

来源:百度文库 编辑:九乡新闻网 时间:2024/04/20 08:38:39

如何用好你的sed  

2010-08-05 17:36:41|  分类: Shell/Perl |  标签:sed  使用   |字号大中小 订阅

      我估计有很多人在做shell开发时,不会用到sed这个工具,我们经常不回去使用它,即使使用,也常常是做查找替换来使用,但是他的确是一个很强大的工具,有很多功能我们可能常常忽略掉。       先来看看sed一般的用法,就是我们最常用到的直接替换,在这里注意,sed是一个流编辑器,什么是流呢, 如果你经常用管道的话,应该就很熟悉,可以把输入输出看成像流水一样。这边是一些替换的例子。      sed s/white/black/ new #把old文件里的white替换成black 输出到new文件里,或者   sed s/white/black/ old >new  #或者   echo white | sed s/white/black #仅作测试   从上面的例子看到,sed命令实际由这几部分构成:   s  替换命令   /../../  分隔符   white  查找字符,实际上应该是正则表达式   black  替换字符   我们再来看一个例子,如果我们把/usr/local/bin替换成/usr/bin   那么我们可以这样写 sed 's/\/usr\/local\/bin/\/usr/bin/' new    天啊,太麻烦了,必须要这样写么,未必,我们的分隔符实际上可以用其他的字符来代替的。   我们完全可以通过以下来实现。   sed 's|/usr/local/bin|/usr/bin|' new   sed 's_/usr/local/bin_/usr/bin_' new   只要你在选择分隔符的时候不和替换字符重复就可以了。有些时候,你可能需要一些给查找到的字符加一些修饰字符,那么就可以使用&操作符,例如:    echo abc | sed 's/[a-z]*/(&)/'     (abc)        我们在使用sed进行替换的时候,他会从输入流中找出第一个匹配的进行替换,而对后面的输入不再处理,如果你想处理所有的输入,可以使用全局选项g.例如        echo "abc is not a good abc" | sed 's/abc/xyz/g'       我们在默认的情况下,每次我们替换完成后,sed会把所有的行输出,但是我们可以使用如下方式只显示替换了的行。       sed -n 's/pattern/&/p'