【命令名称】 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