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 ~]#