通过将近一个月在马哥教育的学习,这些天将学习到的知识总结一下,今天就介绍下sed的简单用法。

     sed  Stream EDitor 流式编辑器,行编辑器 

   sed包含两个空间

      模式空间

        匹配到的行在模式空间中进行处理,模式空间的文本在处理之前,每一次都会先显示

     保留空间

        

     我们要记住使用sed对原文件进行操作,操作的结果会显示出来,但并不会对原文件进行改变

   

    sed命令使用格式

      sed [options] 'script' input_file

      sed '/PATTREN/command' input_file

   sed '/pattern1/,/pattern2/command' input_file      从匹配到1的行到匹配到2的行

 

   sed 的选项

      -i           直接操作原文件,对原文件生效

             -n           静默模式,只显示处理以后的内容

       -r      sed默认支持基本正则表达式

       -e      支持读取脚本

 

  sedscript

        p       显示结果,一般和-n搭配使用

             s///     内容的替换,和vim中的使用相同,支持g匹配所有,i不区分大小写。

             a \          在模式匹配搭到的行的后面添加新的内容要添加的内容

             i \           在要模式匹配到的行的前面添加新的内容\后跟要添加的内容

             r            在匹配行的后面追加文本中的内容

             w            将匹配到存在一个文件中

             n            除去匹配到的行,操作的行保下一行

             N            操作匹配到的行和下一行

             h            将模式空间中的内容复制到保留空间  覆盖

             H                                              追加

             g            将保留空间的内容复制到模式空间    覆盖

             G                                              追加

             d             删除

             b             跳转符合模式的行

             =             每一行显示行号

             b lable    b:xx(不能超过7设置跳转标

             y/字符集1/字符集2/

             x 将保留空间和模式空间对调

 

举例:

1.将匹配到的行删除

#sed /abc/d text

2.将匹配到的行删除,并更改原文件

#sed -i /abc/d text

3.将小写字母a替换成大写

#sed s/a/A/ text

4.加个-n的时候,什么也不会显示,-n就是停止模式空间的自动打印

#sed -n s/a/A/ text

5.#sed s/a/A/p text

这里我们加入了p,在将模式空间中的行打印出来的同时,p再将此行显示一次,我们会看到相同的两行

6.#sed -n s/a/A/p text

-n 搭配使用,模式空间不再自动打印,通过p来显示,这样我们就只得到更改后的结果

7.#sed /abc/a\def text

在匹配搭配abc的行下新添加包含def的行

8.#sed /abc/i\def text

在匹配到abc的行上心添加包含def的行

9.#sed '/abc/n;s/a/A/' text

不对匹配到的进行后面的操作

10.#sed '/abc/N;s/\n//' text

N表示将匹配到的行的下一行追加到模式空间中,通过s将换行符去掉,将两行何为一行

11.# sed '1!G;h;$!d' text

叹号对处理命令取反,1G,除了第一行,其余的将保留空间追加到模式空间,然后在把模式空间中的内容覆盖到保留空间,除了最后一行都删除;最后我们得到的结果是,行的顺序都颠倒了过来

12.#sed '/#/b label;d;b:label;a\abc' text

把#号作为标签,匹配到#号的行就删除,不匹配的行在行的下面添加内容为abc的新行