您的位置:首页 > 其它

sed之思维导图

2016-12-07 14:50 295 查看
转载自:http://www.furion.info/283.html

最近工作中严重感觉不顺手,加上要给同事写个简单的小脚本,憋了半天才倒腾出来一个玩意,而且暴丑,同时也被组内大神鄙视了,说我写的什么呀,太尼玛丑了。于是我感觉有必须好好的学学sed了。

     废话不多说,经过我闭关修炼N久,终于有了点成果。无图无真相,有图为证:

 

                            



Contents [hide]

1  
1.基本执行流程:

2  
2.地址匹配:

3 3.正则:

4 4.分组:

5 5.flags:

6 6.执行方法:

7 7.sed选项:

8 8.总结:


  1.基本执行流程:

          Read、Execute、Print、Repeat,懂这个就ok了。input文件的每一行都要执行所有的sed 命令,之后才会读取下一行执行。

 


  2.地址匹配:

         sed由ed发展而来(ed是vim等的底层),ed默认必须指定地址范围,而sed则相反,sed默认的地址访问就是整个文件。所以当需要指定某些范围执行特定命令时,必须限定相应的范围。

         具体的地址匹配方法有三种:

              a)具体的行号

              b)正则表达式

              c)行号加正则

         细节不再多说,图中的地址匹配部分也都有说明。

 


3.正则:

         sed支持普通正则以及扩展正则,建议使用选项-r从而使sed支持扩展正则。普通正则比较麻烦,分组必须使用\(.*\)的形式,而扩展正则可以直接使用(.*)。

          具体的正则表达式也不多说了,常用的有:

           a)^ 行开始瞄点

           b)$ 行结束瞄点

           c)\b 单词边界

           d)[a-z] 小写字母

        等等,就不多说了。

 


4.分组:

         分组是用来保存特定部分的内容的,如(ab)(cd),则第一个分组为(ab),后续就可以使用\1等再次使用该分组,从而实现\2\1这种内容的颠倒。当然这只是一个最简单的例子,具体的同样建议采用-r选择,从而使用扩展正则的( )捕获分组。

 


5.flags:

       flags为替换命令(s)的一系列的标志位,常用的有:

        a)g:替换全部

        b)i :不区分大小写的替换

        c)p: 打印

      

       这里有个比较有趣的gnu flags,即只在gnu版本sed上支持的标志位。详见图上面的的gnu flags 部分。

       

        gnu flags中增加了几个很有趣的标志,用来实现大小写之间的转换。个人以为这是sed中大小写转换最方法的方法了。通常sed中没有太好的方法实现大小写的转换,常用的做法有:
sed  ‘y/abc/ABC/’  inputfile


        缺点为需要写很长很长的替换列表,而采用gnu flags就很爽了,实现如下:
sed ‘s/(.*)/\L&/’ inputfile


      巧妙的地方就在于\L,\L将后续的内容统统转换为大写,类似的\U会转换为小写。而\l与\L效果一样,但\l的作用范围仅仅为后续的一个字符,\L则内后续的全部内容。

    

      有同学担心\L、\U的方法过大,无法控制,表要担心,\E可以阻断\L等的作用范围,从而控制\L等的大小写替换。

 


6.执行方法:

      sed命令有灵活的执行方法:

        a)单个命令: sed [optinon] { sed-commands } {input-file}

        b)多个命令-e: sed [option] -e {sed-com-1} -e {sed-com-2} {input-file }

                采用-e 选项告诉sed将内容解释为命令

        c)多个命令{}:

                          sed [options] ‘

                              { sed-command1 sed-command2

                             }’ input-file

               采用{}包含多个命令

 

        d)sed命令文件-f: sed [option] -f {sed-coman-file } {input-file }    

                 采用-f选项让sed执行文件中的命令,可以提高脚本的复用。

 


7.sed选项:

        sed有多个选项用以实现不同的目的,常用的有:

         a) –i : 告诉sed直接修改原文件,也可以使用-ibak的形式,告知sed自动生成加bak后缀的备份文件

         b)-f:   指定sed命令文件

         c) –r:  使用拓展正则

        d) –n:   屏蔽默认输出

 


8.总结:

  

       个人以为sed中核心的就是以上7部分了,其他的都是具体的应用了,如删除d、打印p、添加行a(或者i)、读写文件等。当然了还有我们最经常使用的替换(s)命令。

       

        但这些具体命令的应用都会涉及到前面说的地址匹配、正则、flags等内容,所以前面的基础弄明白了,具体的实现就很简单了,无非是各种组合而已。

 

        总之,通过这段的“闭关”还是学习到了很多,大大的增加了对sed这一利器的熟悉,基本的操作、应用等已经阻挡不了我了。不过遗憾的是,sed高级部分的模式空间还没有很好的理解,所以这里也就不献丑多说这部分了,坐等大神讲解模式空间这部分了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: