sed

Sed

sed:linux三剑客之一,sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

其中,sed的替换功能应用极为广泛,下面主要先介绍下它的替换功能。

取IP地址的例子:过滤功能

  ifconfig eth0|sed -n '2p'|sed -nr 's#^.*addr:([0-9].*) B.*#\1#gp'

  结果:ip地址

sed替换功能举例如下:

[root@xhsj_ClouderaManager test]# cat test.txt
oldboy
oldboy

把oldboy替换成oldgirl:

sed -i 's/oldboy/oldgirl/' test.txt

结果:

cat test.txt
oldgirl
oldgirl

s:表示查找并替换。 

find与sed结合以及例子

把/data/目录下所有含有test文件的里面的内容里的oldboy换成oldgirl: find与sed结合

[root@saltstack-client1 data]# pwd

/data

[root@saltstack-client1 data]# ls

a  b  c  d  e  test  tomcat 

法一:

[root@saltstack-client1 data]# find /data/ -type f -name "test.txt" |xargs sed -i 's#oldboy#oldgirl#g' 

法二:

[root@saltstack-client1 data]# find /data/ -type f -name "test.txt" -exec sed -i  's#oldboy#oldgirl#g' {} \; 

Sed命令实战复习回顾

打印

例子:

[root@saltstack-client1 data]# cat oldboy.txt

ddd fff

2ddd fff

3ddd fff 

打印第二行内容:

[root@saltstack-client1 data]# sed -n '2p' oldboy.txt

2ddd fff 

打印第一行到第二行的内容:

[root@saltstack-client1 data]# sed -n '1,2p' oldboy.txt

ddd fff

2ddd fff

替换

把文件里内容里的所有的ddd换成oldboy:

[root@saltstack-client1 data]# sed -i 's#ddd#oldboy#g' oldboy.txt

[root@saltstack-client1 data]# cat oldboy.txt

oldboy fff

2oldboy fff

3oldboy fff

Sed的后项引用

Sed的后项引用:

 

后向引用的例子:

取出ip地址的例子:sed 

 [root@saltstack-client2 test]# ifconfig

eth2      Link encap:Ethernet  HWaddr 52:54:00:55:D7:6D 

          inet addr:10.122.129.55  Bcast:10.122.129.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:2876420 errors:0 dropped:0 overruns:0 frame:0

          TX packets:265070 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:693181412 (661.0 MiB)  TX bytes:24669346 (23.5 MiB)

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:84802 errors:0 dropped:0 overruns:0 frame:0

          TX packets:84802 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:4240622 (4.0 MiB)  TX bytes:4240622 (4.0 MiB)

 

法一:sed 

[root@saltstack-client2 test]# ifconfig eth2|sed -n 's#^.*dr:\([0-9].*\) Bcast.*$#\1#gp'

10.122.129.55 

法二:sed

[root@saltstack-client2 test]# ifconfig|sed -n '2p'|sed -n 's#^.*dr:\([0-9].*\) Bcast.*$#\1#gp'

10.122.129.55

法三:自己搞的

[root@saltstack-client1 ~]# ifconfig eth2

eth2      Link encap:Ethernet  HWaddr 52:54:00:3C:DD:D5 

          inet addr:10.122.129.54  Bcast:10.122.129.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:3775521 errors:0 dropped:0 overruns:0 frame:0

          TX packets:418876 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:881222306 (840.3 MiB)  TX bytes:38853944 (37.0 MiB)

 

 [root@saltstack-client1 ~]# ifconfig eth2|sed -n 's#^.* addr:\([0-9].*\) Bca.*$#\1#gp'

10.122.129.54

Sed与正则表达式相关以及相关的例子

sed -r 's#(可以用正则匹配)#\1#g' oldboy.txt 

r:表示小括号里一些特殊字符不需要反斜线转义了,而是使用正则。 

例子:

[root@saltstack-client1 data]# cat oldboy.txt

oldboy fff

2oldboy fff

3oldboy fff

[root@saltstack-client1 data]# sed -r 's#(.*)ff#\1#g' oldboy.txt

oldboy f

2oldboy f

3oldboy f

[root@saltstack-client1 data]# sed -r 's#(.*)f#\1#g' oldboy.txt

oldboy ff

2oldboy ff

3oldboy ff

[root@saltstack-client1 data]# sed -r 's#(.*) (.*)#\1 \2#g' oldboy.txt

oldboy fff

2oldboy fff

3oldboy fff

[root@saltstack-client1 data]# sed -r 's#(.*)#\1#g' oldboy.txt

oldboy fff

2oldboy fff

3oldboy fff 

 

posted on 2017-03-15 13:35  永远的大空翼  阅读(222)  评论(0编辑  收藏  举报