sed本身也是一个管道命令,可以分析standard input。而且sed还可以将数据进行增加、删除、替代、撷取特定行等的功能。
①以行为单位的增加、删除功能
nl /etc/passwd | sed ‘2,5d’ //sed -e ‘2,5d’ 一个意思;
PS: sed后面接的动作,必须以引号括住!!
nl /etc/passwd | sed ‘2d’
nl /etc/passwd | sed ‘3,$d’ //$代表最后一行
nl /etc/passwd | sed ‘2a drink tea’ //drink tea 被加在第二行之后
nl /etc/passwd | sed ‘2i drink tea’ //drink tea 被加在第二行之前
nl /etc/passwd | sed ‘2a drink tea or ...\
> drink beer?’ //这样就增加了不止一行在第二行之后了
②以行为单位的取代、显示功能
nl /etc/passwd | sed ‘2,5c drink tea’ //2-5行被取代为drink tea了
nl /etc/passwd | sed -n ‘5,7p’ //必须-n选项
ps:等价于 nl /etc/passwd | head -n 7 | tail -n 3
③部分数据的搜寻与取代功能
sed ‘s/old/new/g’
例子:
l ifconfig eth0 | grep ‘inet addr’
得到inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
l ifconfig eth0 | grep ‘inet addr’ | sed ‘s/^.*inet addr://g’
得到192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
l ifconfig eth0 | grep ‘inet addr’ | sed ‘s/^.*inet addr://g’ | sed ‘s/Bcast.*$//g’
得到192.168.1.100
④直接修改文件内容(危险动作,不过非常有用)
sed可以直接修改文件的内容,而不必使用管道命令。
sed -i ‘s/\.$/\!/g’ regular.txt //-i 选项让sed直接去修改文件内容,而不是由屏幕输出
作用:把行的最后一个字符是.的替换为!
sed -i ‘$a #this is a text’ regular.txt
作用:在最后一行后面加入【#this is a test】