在文本中以上下行插入内容的参数:

a\ 为下方插入内容

i\ 为上方插入内容

c\ 为新内容把关键字的行替换(少用)

一般a\i\比较常用


[root@localhost ~]# sed '/leon/a\hello you' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
leon:x:500:500::/home/leon:/bin/bash
hello you
tom:x:501:501::/home/tom:/bin/bash

a\的效果,插入在leon关键字下方


[root@localhost ~]# sed '/leon/i\hello you' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
hello you
leon:x:500:500::/home/leon:/bin/bash
tom:x:501:501::/home/tom:/bin/bash

i\的效果,插入在leon关键字的上方


删除文本

Sed ‘1d’test 删除第1行,打印显示其他内容

[root@localhost ~]# cat abc
aaaaaaa
bbbbb
ccccc
[root@localhost ~]# sed '1d' abc
bbbbb
ccccc

删除了第一行


[root@localhost ~]# sed '2,4d' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
tom:x:501:501::/home/tom:/bin/bash

删除24


[root@localhost ~]# cat abc
aaaaaaa
bbbbb
ccccc
[root@localhost ~]# sed '$d' abc
aaaaaaa
bbbbb

删除最后一行


sed’10,$d’ abc 删除10行到最后一行


[root@localhost ~]# sed '/bbbbb/d' abc
aaaaaaa
ccccc

删除关键字为bbbbb的行


替换命令

格式:sed‘s/源关键字/替换关键字/’文件名

这里只是替换出关键字的字符,并不会以行来替换,如sed‘s/abc/bb/’ a.txt 这里abc的行其他内容不受影响

若:sed–n ‘s/源关键字/新关键字/p文件名――只打印出替换那行的结果

[root@localhost ~]# sed -n 's/leon/win/p' test
win:x:500:500::/home/leon:/bin/bash

sed –n‘s/abc/ccc/pg’ test 这里的g是代表全文本中的abc关键字都替换为ccc,如果不加上g,只匹配每行的第一个abc


[root@localhost ~]# cat abc
aa aa aa
aa aa cc
bb cc dd
[root@localhost ~]# sed 's/aa/uu/' abc
uu aa aa
uu aa cc
bb cc dd
[root@localhost ~]# sed 's/aa/uu/g' abc
uu uu uu
uu uu cc
bb cc dd

这就是有g和没加上g的效果


指定替换第n次的匹配,如一个文件中有5leon的行,指的也可以是全文,现只需要替换第3leonwin


[root@localhost ~]# cat abc
leon leon leon leon leon
leon leon leon leon
[root@localhost ~]# sed 's/leon/win/3' abc
leon leon win leon leon
leon leon win leon

这样有多少个leon的行中,第3leon就更改为win


&的用法

sed‘s/leon/&aa/’ abc &是代表前面的leon的字符,结果会更改为leonaa,这样的好处,例如要修改123456789123456789ab,这样源关键字太长,直接用&来代替

[root@localhost ~]# cat abc
leon leon leon leon leon
leon leon leon leon
[root@localhost ~]# sed 's/leon/&aa/' abc
leonaa leon leon leon leon
leonaa leon leon leon

注意,如果在最后的/后面加上g,则代表全文所有leon都会更改为leonaa

这里的&=leon


w命令为输入定向文件,但由于有重定向符号〉,所以w命令很少用

格式:sed –n ‘s/leon/win/w test1’ /etc/passwd


r命令,读取文件,把一个文件的内容读取到另一个文件的关键字的下一行

[root@localhost ~]# sed '/leon/r  abc'  test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
leon:x:500:500::/home/leon:/bin/bash
leon leon leon leon leon
leon leon leon leon
tom:x:501:501::/home/tom:/bin/bash

abc文件里leon关键字的行读到test文件中


也可以:

[root@localhost ~]# ifconfig eth0 | sed '/192.168/r abc'
eth0      Link encap:Ethernet  HWaddr 00:0C:29:A3:7E:26
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
leon leon leon leon leon
leon leon leon leon

q是匹配退出命令,当指定匹配到成功就马上退出,不再匹配下一个关键字

[root@localhost ~]# cat abc
leon win aaa
leon leon leon leon
[root@localhost ~]# sed '/leon/q' abc
leon win aaa

只匹配第一个关键字的行,就马上退出不再匹配下一行的leon


y也是替换命令,跟s差不多,但需要对等长度,就是源关键字是多少长度,新关键字也需要多少长度

sed‘y/aaaaa/11111/’ abc 源和新的关键长度必须要一样,y命令很少用上


{ }相当于-e,属于多命令编辑

[root@localhost ~]# sed -n '3,${p;=}' test
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
3
leon:x:500:500::/home/leon:/bin/bash
4
tom:x:501:501::/home/tom:/bin/bash
5
[root@localhost ~]# sed -n -e '3,$p' -e '3,$=' test
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
3
leon:x:500:500::/home/leon:/bin/bash
4
tom:x:501:501::/home/tom:/bin/bash
5

两个命令是对等效果的,但{}使用没;命令的灵活


;编辑多命令,相当于-e差不多

[root@localhost ~]# cat abc
leon win aaa
leon leon leon leon
[root@localhost ~]# sed 's/leon/win/; s/aaa/123/' abc
win win 123
win leon leon leon
[root@localhost ~]# sed -n '1,$p;=' abc
leon win aaa
1
leon leon leon leon
2

可以看到用;比书写{}简洁,而且更灵活

也可以分开打印且同时替换

[root@localhost~]# sed -n 's/leon/terry/p; 1,2p' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:XFont Server:/etc/X11/fs:/sbin/nologin
terry:x:500:500::/home/leon:/bin/bash

既能显示12行内容,又能打印出替换的结果


sed的内容就到这里