在文本中以上下行插入内容的参数:
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
删除2-4行
[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�Cn ‘s/源关键字/新关键字/p文件名�D�D〉只打印出替换那行的结果
[root@localhost ~]# sed -n 's/leon/win/p' test win:x:500:500::/home/leon:/bin/bash
sed �Cn‘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次的匹配,如一个文件中有5个leon的行,指的也可以是全文,现只需要替换第3个leon为win
[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的行中,第3个leon就更改为win了
&的用法
sed‘s/leon/&aa/’ abc &是代表前面的leon的字符,结果会更改为leonaa,这样的好处,例如要修改123456789为123456789ab,这样源关键字太长,直接用&来代替
[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 �Cn ‘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
既能显示1-2行内容,又能打印出替换的结果
sed的内容就到这里