sed [参数] 动作
参数:
-e :直接在命令列模式上进行 sed 的动作编辑
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-i :直接修改读取的文件内容,而不是输出到终端。
-n :只有经过sed 特殊处理的那一行(或者动作)才会被列出来
动作:
[n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除,因为是删除啊,所以 d 后面通常不接任何东西
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正规表示法,例如:1,20s/old/new/g
例子:
shell>nl filename | sed '2,5d' #删除filename的第二行到第五行
shell>nl filename | sed '2d' #删除filename的第二行
shell>nl filename | sed '3,$d' #删除filename的第三行以后
shell>nl filename | sed '2a test' #在第二行以后,即第三行加上test,如果是2i就是在第二行以前
shell>nl filename | sed '2,5c test' #替换第二行到第五行的内容为test
shell>nl filename | sed -n '2,5p' #仅输出第二行到第五行的内容
shell>nl filename | sed -n '/test/p' #仅输出包含test的行
shell>nl filename | sed '/test/d' #删除包含test的行
数据的替换:
sed 's/要被取代的字串/新的字串/g'
举例一:直接输出ip
1.查找ip
shell> /sbin/ifconfig em1
em1 Link encap:Ethernet HWaddr F8:BC:12:3C:7F:50
inet addr:192.168.11.188 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: fe80::fabc:12ff:fe3c:7f50/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:201076554 errors:0 dropped:1 overruns:0 frame:0
TX packets:131409642 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:79321447310 (73.8 GiB) TX bytes:38975153602 (36.2 GiB)
Interrupt:35
2.将IP前面的部分予以删除
shell>/sbin/ifconfig em1 |grep 'inet addr'| sed 's/^.*addr://g'
192.168.11.188 Bcast:192.168.255.255 Mask:255.255.0.0
3.将IP后面的部分予以删除
shell>/sbin/ifconfig em1 |grep 'inet addr'| sed 's/^.*addr://g'| sed 's/Bcast.*$//g'
192.168.11.188
举例二:直接修改文件内容
利用 sed 将filename内每一行结尾若为 . 则换成 ?
shell>sed -i 's/\.$/\?/g' filename
利用 sed 直接在filename最后一行加入test
shell> sed -i '$a test' filename