sed

sed (流编辑器)

 

1.sed默认不编辑源文件,仅对模式空间的数据进行处理,处理后打印至屏幕

 

格式:sed 地址编辑命令文件(可以有多个)

 

    地址:就是对那些行做出处理。格式中可以不用空格,就是地址空间中间可以不用空格。

    指定地址的方法:

    (1)起始行,结束行。 例子:1,100  如果是单独一行直接写行号即可

    (2)使用模式 :/正则表达式/    例子:/^root/ 以root开头的行

    (3)/模式1/,/模式2/   表示第一次被“模式1匹配的行开始”,至第一次被“模式2匹配的行结束这中间          所有的行。

    (4)指定的行     $:表示最后一行, $-1:表示倒数第二行。

    (5)指定的行,+N :表示从指定的行开始,向后的N行。

    编辑命令

    1d:删除符合条件的行

    2p:显示符合条件的行

    3a \字符串:在指定的行下边添加新行,内容为字符串。

    4i \字符串: 在指定的行上边添加新行,内容为字符串

    5c \字符串:替换当前行的内容

    6r 将指定的文件的内容添加至符合条件的行处

    7w 将指定范围内的内容另存值指定的文件中。

 

 

2.编辑命令例子

例子文件,以下的例子使用此文件

[root@client2 ~]# cat abc

123456

qwe

hello

nihao

benet

accp

 

1d:删除符合条件的行

 

例子1:删除abc文件中的第一行

[root@bogon ~]# sed '1d' abc

qwe

hello

nihao

benet

accp

 

 例子2:删除文件中的1至3行

[root@client2 ~]# sed "1,3d" abc

nihao

benet

accp         

 

  注意:sed后边的引号用单引号双引号都可以,但是如果里边有变量,而且变量要替换,就要用双引号。

  但是这样修改没有修改源文件,而是修改了模式空间的内容。

 

 如果想直接修改源文件请加上-i选项

    

2p显示符合条件的行

    sed -n:静默模式 不在默认显示模式空间中的内容。 结合P命令使用,这样符合条件的行就不会显示2遍。模式空间也不会显示

 

  例子:我们将1到3行打印到屏幕上,如果不加-n选项的话结果是以下效果

 

[root@client2 ~]# sed  "1,3p" abc

123456

123456

qwe

qwe

hello

hello

nihao

benet

accp

 

13行的内容都被显示了2

 

加上-n选项就不会出现以上情况了

 

[root@client2 ~]# sed -n "1,3p" abc

123456

qwe

hello

 

 

3a\字符串:在指定的行下边添加新行,内容为字符串

         

    例子:在第一行的下一行添加字符串hello

    [root@client2 ~]# sed '1a \hello' abc

    123456

    hello  #添加完成

    qwe

    hello

    nihao

    benet

    accp

  4i  \字符串: 在指定的行上边添加新行,内容为字符串

   例子:在第一行的上一行添加字符串hello

    [root@bogon ~]# sed '1i hello' abc

    hello

    123456

    qwe

    hello

    nihao

    benet

    accp

 

 5c \字符串:替换当前行的内容

例子:将第一行的内容替换成hello。

[root@bogon ~]# sed '1c hello' abc

hello

qwe

hello

nihao

benet

accp

 

6 r 文件:将指定的文件的内容添加至符合条件的行处

 例子:将b文件的内容添加到第2行下边

[root@bogon ~]# sed '2r /root/b' abc

123456

qwe

benet

hello

nihao

benet

accp

 

 

 w 文件:将指定范围内的内容另存值指定的文件中。

 

 例子:将abc文件中的1到3行保存到b文件中

sed '1,3w /root/b' abc

 

4.sed替换操作

 

格式:sed "s/旧内容/新内容/g"   文件名

 

例子1:将第一行内容的6替换成8

 

[root@bogon ~]# sed  '1 s/6/8/g' abc

123458

qwe

hello

nihao

benet

accp

 

例子2:在第一行的行首添加#号进行注释

[root@bogon ~]# sed '1 s/^/#/g' abc

#123456

qwe

hello

nihao

benet

accp

 

例子3:在第一行的行尾添加hello

[root@bogon ~]# sed '1 s/$/hello/g' abc

123456hello

qwe

hello

nihao

benet

accp

 

例子4:在第一行3的后边添加hello

[root@bogon ~]# sed '1 s/3/&hello/g' abc

123hello456

qwe

hello

nihao

benet

accp

 

5.选项

     sed -i  :直接修改源文件

 

直接删除了源文件的第一行

sed -i '1d' abc

以上所有的例子没有加-i选项的没有直接修改源文件而是修改了模式空间的内容

posted @ 2017-03-11 17:35  借风拥你  阅读(175)  评论(0编辑  收藏  举报