sed 本身是一个管道命令,可以分析标准输入,而且sed可以将数据进行取代、删除、新增等操作。
命令格式:sed -[nefr] [动作]
选项与参数:
-n :使用安静模式,只输出经过sed处理的那一行信息
-e:直接在指令列模式上进行sed的动作编辑
-f:直接将sed 的动作写入一个文件内, -f filename可以执行该文件内的动作
-r:支持扩展的正则表达式
-i:直接修改读取文件的内容,而不是由屏幕输出
动作说明:[n1[,n2]] function
n1,n2:不见得会存在,一般代表动作作用的行
function有底下这些:
a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c:取代,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
d:删除,d后面不接任何东西
i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p:打印,将某个选择的数据印出,通常与参数sed -n一起出现
s:取代,可以直接进行取代工作,通常可以搭配正则表达式。
例题一:将/etc/passwd 的内容列出并且打印行号,同时,请将2-5行删除
# cat -n /etc/passwd | sed '2,5d'
例题二:在第二行后(即第三行)加上“drink tea?”
# cat -n /etc/passwd | sed '2a drink tea ?'
那在第三行前呢? sed '2i drink tea ?'
例题三:插入两行呢?
# cat -n /etc/passwd |sed '2a drink tea \
or drink beer'
注意:一定要分行写
例题四:整行取代,我想将2-5行的内容取代为“No 2-5 number”
# cat -n /etc/passwd | sed '2,5c No 2-5 number'
例题五:仅列出第5-7行
# cat -n /etc/passwd | sed -n '2,7p'
注意,一定要加上参数 -n
例题六:取出本机ip地址:
#ifconfig | grep 'inet addr'|head -n 1|sed 's/^.*addr://g'|sed 's/B.*$//g'
其中^.addr:表示从行头到addr:,B.*$ 表示从字符B开始到行尾
例题七:删除注释
# cat filename | sed 's/#.*$//g'
例题八:删除空白行
#cat filename | sed '/^$/d'
例题九:在regular_express.txt文件末尾加入一行# hello world
#sed -i '$a #helloworld' regular_express.txt
例题十:处理/etc/passwd 为一个新的文件,方式为:删除第四行,第六行则替换成“no six line”
#cat /etc/passwd | sed -e '4d' -e '6c no six line' >passwd.new
注意,当一条sed语句中要进行两个及其以上个动作则需要在每个动作前加上参数 e