【命令名称】 sed
【使用权限】 所有人
【命令语法】
sed [-nefri] [动作]
【功能说明】
将资料进行取代,删除,新增,撷取特定行的功能
【常用参数】
-n 使用安静的模式,在一般的sed的用法中,所有来自stdin的资料一般都会被列出在荧幕上,如
果加了-n参数后,只有经过sed处理的那一行才会被列出来
-e 允许多个编辑同时进行
-f 直接sed的动作写在一个文件中,-f filename则可以执行filename内的sed动作
-r sed动作将支持扩展的正则表达式,默认是基础正规表达式
-i 直接修改文件内容,而不屏幕输出
动作说明: [n1,[n2]] function
n1,n2 : 代表选择行数范围,可有可无
function 有以下参数:
a 新增, a的后面可以接字符串,将会出现在下一行
c 取代, c后面可以接字符串,可以取代n1,n2之间的行
d 删除, 删除所选的行
i 插入 , i后面可以接字符串,将插到上一行
p 列印, 装选中的行列出来
s 取代,可以直接进行取代的工作。这个s的动作搭配正则表达式。如s/a/b/g
备注:最后加g不加g的区别,如果一行中出现重复的字符,加g就是全部替换,不加g,就是替换第一个,后面不替换
补充:
sed中\( \)和\1的功能 (摘自老男孩老师博客)
sed的\( \)的功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。
字符参数
^
锚定行的开始 如:/^sed/匹配所有以sed开头的行。
$
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
.
匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
*
匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]
匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开
头, 紧跟ed的行。
\(..\) 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&
保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<
锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\>
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\} 重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
【实例】
输出cxc.txt内容,有一空行
[cxc@cxcserver ~]$ cat > cxc.txt
glad
good
goooood
test
sheep
monkey
tiger
panda
1.删除空行 (d参数)
[cxc@cxcserver ~]$ sed '/^$/d' cxc.txt
glad
good
goooood
test
sheep
monkey
tiger
panda
2. 把含有good的行增加lunk(a参数)
[cxc@cxcserver ~]$ sed '/good/a lunk' cxc.txt
glad
good
lunk
goooood
test
sheep
monkey
tiger
panda
3.把含有good那行前增加very(i参数)
[cxc@cxcserver ~]$ sed '/good/i very' cxc.txt
glad
very
good
goooood
test
sheep
monkey
tiger
panda
4. 把含有good字符串的行替换成very good
[cxc@cxcserver ~]$ sed '/good/c very goog' cxc.txt
glad
very goog
goooood
test
sheep
monkey
tiger
panda
5.两个以上的操作要加e
[cxc@cxcserver ~]$ sed -e '/^$/d' -e 's/glad/cow/g' cxc.txt
cow
good
goooood
test
sheep
monkey
tiger
panda
6.把含有go的字符整行输出
[cxc@cxcserver ~]$ sed -n '/go/p' cxc.txt
good
goooood
7.加g把含有o全部替换成@
[cxc@cxcserver ~]$ sed 's/o/@/g' cxc.txt
glad
g@@d
g@@@@@d
test
sheep
m@nkey
tiger
panda
8.不加g只是替换第一个o
[cxc@cxcserver ~]$ sed 's/o/@/' cxc.txt
glad
g@od
g@ooood
test
sheep
m@nkey
tiger
panda
9.清除m开头的行
[cxc@cxcserver ~]$ sed '/^[m]/d' cxc.txt
glad
good
goooood
test
sheep
tiger
panda
10. 清除不是m开头的行
[cxc@cxcserver ~]$ sed '/^[^m]/d' cxc.txt
monkey
11.sed中\( \)和\1的功能
[cxc@cxcserver ~]$ ifconfig eth0 |grep "inet addr:"|sed's#^.*addr:\([09].*\Bcast.*$#\1#g' #\r
192.168.20.200
12. 把good到sheep范围的内容打印出来
[cxc@cxcserver ~]$ sed -n '/good/,/sheep/p’ cxc.txt
good
goooood
test
sheep