简介:

  sed本身是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。

 

~]# sed [-nefr] [动作]

    

   参数:

   -n :使用安静模式。在一般的sed的用法中,所有来自stdin的数据一般都会被列出到屏幕上。但如果加上-n参数后,         则只有经过sed特殊处理的那一行才会被列出

   -e :直接在命令行模式上进行sed的动作编辑。

   -f :直接将sed的动作写在一个文件内, -f filename则可以执行filename内的sed动作

   -r :sed的动作支持的是扩展型正则表达式的语法

   -i :直接修改读取的文件内容,而不是由屏幕输出。

 

动作说明:[n1,n2] function

    n1,n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在1020行之间进行的,       则“1020[动作行为]

 

   function 有下面这些参数:

a : 新增, a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)

c : 替换, c的后面可以接字符串,这些字符串可以替换n1,n2之间的行!

d:删除, 因为是删除,所以d后面通常不接任何参数

i :  插入, i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)

P : 打印, 也就是将某个选择的数据打印出来,通常p会与参数sed -n一起运行。

s : 替换, 可以直接进行替换的工作,通常这个s的动作可以搭配正则表达式!例如1,20s/old/new/g 

=:为模式匹配到的行打印行号

!:条件取反;

    地址界定!编辑命令

 

以行为单位的新增/删除功能

  范例一:将/etc/passwd的内容列出并且打印行号,同时,请将第2~5行删除!

     ~]# nl /etc/passwd | sed 2,5d

      注意:sed后面接的动作,请务必以’’两个单括号括住。

      如果只要删除第2行,就可以使用“nl /etc/passwd | sed 2d ”来完成,至于若是要删除第3到最后一行,则         是“nl /etc/passwd | sed 3,$d ”的,那个“$”代表最后一行。

 

  范例二:承上题,在第二行后(即是加在第三行)加上“drink tea”字样!

     ~]# nl /etc/passwd | sed 2a drink tea 

  在a后面加上的字符串就已将出现在第二行后面。那如果是要在第二行前      呢? “nl /etc/passwd | sed 2i drink tea”就对了,就是将“a”变成“i”即可。增加一行很简单,那如果是要     增加两行以上呢?

 

 范例三:在第二行后面加入两行字,例如:“Drink tea or......”与“drink beer?”

   ~]# nl /etc/passwd | sed 2a Drink tea or .....\

>drink beer?

        这个范例的重点是我们可以新增不只一行,可以新增好几行,但是每一行之间都必须要以反斜杠“\”来进行新         行的增加。所以,上面的例子中,我们可以发现在第一行的最后面就有\存在,那是一定要的。

  

以行为单位的替换与显示功能

    范例四:将第2-5行的内容替换成为“No 2-5 number”。

          ~]# nl /etc/passwd | sed 2,5c No 2-5 number

        通过这个方法就能够将数据整行替换了。非常容易吧!sed还有更好用的工具。我们以前想要列出第11~20行,         得要通过“head -n 20 | tail -n 10之类的方法来处理,很麻烦。sed则可以简单直接取出你想要的那几行,是通过         行号来找的。

    范例五:仅列出/etc/passwd文件内的第5-7行

          ~]# nl /etc/passwd | sed -n 5,7p

          注意:如果没有加 “-n” 那么会重复显示

      

v 部分数据的查找并替换的功能

  sed ‘s/要被替换的字符串/新的字符串/g’   

 替换标记:

     g:全局替换

     W /PATH/TO/SOMEFILE :将替换成功的结果保存至指定文件中。

     p:显示替换成功的行  

 

范例六:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符。

       ~]# sed s@^[[:space:]]\+@@ /boot/grub/grub2.cfg

 

地址界定:

      n1:显示第n1

   n1,n2:显示n1n2之间的行

      $:最后一行

1~2:显示所有奇数行

2~2:显示所有偶数行

 

v 高级编辑命令

h:把模式空间中的内容覆盖至保存空间中

H:把模式空间中的内容追加至保存空间中

g:把保持空间中的内容覆盖至模式空间中

G:把保持空间中的内容覆盖至模式空间中

x:把模式空间中的内容与保持空间中的内容互换

n:覆盖读取匹配匹配到的行的下一行至模式空间中

N:追加读取匹配到的行的下一行至模式空间中

d:删除模式空间中的行

D:删除多行模式空间中的所有行

 

示例:

   sed  -n  n;p  file : 显示偶数行

   sed  1!G;h;$!d  file: 逆序显示文件的内容

   sed   $!d  file :  取出最后一行

   sed  $!N;$!D  file :  取出文件最后两行

   sed  /^$/d;G  file :  删除原有的所有空白行,而后为所有的非空白行后添加一个空白行。

   sed  n;d  file :  显示奇数行

   sed  G  file : 在原来的每行后方添加一个空白行