sed 实例详解

文本内容:

101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

1.sed 增加内容

-a         往文本或号后面增加内容
-i          往行号前增加内容
-a  实例:在Alex 前增加111,Kang,OOO
[root@localhost ~]# sed '1a 111,Kang,OOO' test.txt 
101,oldboy,CEO
111,Kang,OOO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

-i 实例:在Alex后增加两行内容‘123,Kang,bbb   456,Ming,ccc’
[root@localhost ~]# sed '4i 123,kang,bbb\n456,ming,ccc' test.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
123,kang,bbb
456,ming,ccc
104,yy,CFO
105,feixue,CIO

2.sed 删除行

-d     删除指定行
[root@localhost ~]# sed '1d' test.txt        #删除指定第一行
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

[root@localhost ~]# sed '1,3d' test.txt        #删除一到3行
104,yy,CFO
105,feixue,CIO

[root@localhost ~]# sed '/yy/d' test.txt      #根据内容删除行
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
105,feixue,CIO

3.sed 修改文本内容

s:        单独使用,将每一行中行一处匹配的字符串进行替换 ==>sed 命令
g:        每一行进行全部替换,==>sed命令s的替换标志之一,非sed命令
-i:       修改文件内容==>sed软件的选项

简单文本内容替换,把oldboy替换成kang
[root@localhost ~]# sed 's#oldboy#kang#g' test.txt 
101,kang,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

固定操作第5行,以免影响其它行的内容
[root@localhost ~]# sed '5s#feixue#kang#g' test.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,kang,CIO

sed 实例获取IP地址:
[root@localhost ~]# ifconfig eth2 | sed -n '2p'
										inet addr:10.3.151.25  Bcast:10.3.151.255  Mask:255.255.255.0
[root@localhost ~]# ifconfig eth2 | sed -n '2p' | sed 's#^.*dr:##g'
10.3.151.25  Bcast:10.3.151.255  Mask:255.255.255.0
[root@localhost ~]# ifconfig eth2 | sed -n '2p' | sed 's#^.*dr:##g' | sed 's#  B.*##g'
10.3.151.25

通过sed后向引用
sed -n 's#()()#\1\2#g' file
当在前面匹配部分用小短号的时候,第一个括号的内容,可以在后面引用\1输出
第二个括号的内容,可以在后面引用\2输出

例子:
my name is Mingkang how are you。
[root@localhost ~]# cat test.txt | sed -nr 's#^.*s (.*) h.*$#\1#gp'
Mingkang                 #要求直接输入Mingkang

[root@localhost ~]# ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 00:50:56:80:6E:7E  
										inet addr:10.3.151.25  Bcast:10.3.151.255  Mask:255.255.255.0
										inet6 addr: fe80::250:56ff:fe80:6e7e/64 Scope:Link
										UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
										RX packets:2223593069 errors:0 dropped:0 overruns:0 frame:0
										TX packets:2229351853 errors:0 dropped:0 overruns:0 carrier:0
										collisions:0 txqueuelen:1000 
										RX bytes:163251461945 (152.0 GiB)  TX bytes:131281217921 (122.2 GiB)

[root@localhost ~]# ifconfig eth2 | sed -nr 's#^.*dr:(.*)  B.*$#\1#gp'
10.3.151.25

4.sed 的n与p命令结合使用才生效。

[root@localhost ~]# sed '2p' test.txt 
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@localhost ~]# sed -n '2p' test.txt 
102,zhangyao,CTO
[root@localhost ~]#