sed:(流编辑器),全称是:StreamEditor。sed命令的功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大.sed是行编辑器(全屏编辑器有:vi)。sed是非交互式的编辑器。默认它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。sed基本用法:sed‘AddressCommand’file………..(sed‘指定地址指定编辑命令’文件名1文件名2………….)指定地址就是对哪些行进行处理。注意:指定地址和指定编辑命令之间不需要空格。意思就是指对文件1中的行执行编辑命令。sed[选项]‘AddressCommand’file……选项可有可不有,其中:-n:表示静默模式,表示不显示模式空间中的内容,指显示命令需要的,包括去掉重复的。-i:直接修改原文件,注意使用。-e:script–escript可以同时执行多个脚本。-f:sed_script。sed–f/root/scriptccaa.txt意思是说:把/root/scriptcc里的脚本一个一个的用在aa.txt文件上。-r:表示使用扩展正则表达式。指定地址Address包括:1.起始行,结束行(startline,endline中间用逗号隔开,指从哪行到哪行)如:1,100表示从第一行到第100行。给一个数值如5表示第五行。[root@entestold]#sed-n5paa(显示aa文件中的第五行,不加-n全显示第五行显示2遍)hello![root@entestold]#sed-n1,3paa(显示aa文件1到3行)/thisisaahahahahavewoshihan.#ZHANGDAWEITHISISDAXIE![root@entestold]#2.模式(模式指正则表达式,regexp)(用两斜线/正则表达式/)如:/^root/找以root开头的行。就是找文件中所有以root开头的行。模式匹配需要两个斜线引起来,如/goo/。[root@entestold]#sed-n/^app/paa(查找以app开头的行)appleismyfavoritefood.[root@entestold]#sed-n/^#/paa(查找以#号开头的行)#ZHANGDAWEITHISISDAXIE!#ok!thINK.#zheshisuojin![root@entestold]#[root@entestold]#sed-n/^$/paa(查找空白行)[root@entestold]#[root@entestold]#sed-n/\!$/paa(查找以!号为结尾的行)#ZHANGDAWEITHISISDAXIE!hello!findthisisok![root@entestold]#3.模式1,模式2(表示第一次被模式1匹配的行开始到第一次被模式2匹配的行结束)4.$(表示文件中最后一行)$-1:倒数第二行[root@entestold]#sed-n\$paa(显示最后一行)theokisnotok!hello*yes$or#![root@entestold]#[root@entestold]#sed-n'\$p'aa(注意:用单引号无效)sed:-eexpression#1,char3:unterminatedaddressregex[root@entestold]#5.起始行,+n表示从起始行往后加多少行。包括当前行加上指定行,一共是n+1注意。如5,+6表示从第五行开始加上6行。指定编辑命令Command包括:1.d:删除符合条件的行。例子:[root@entestold]#catbthisisbhellozhelishisanshisihangya[root@entestold]#sed'1,2d'b(删除1和2行,注意:并没有删除源文件)zhelishisanshisihangya[root@entestold]#[root@entestold]#cat-nb1thisisb2hello3zhelishisan4shisihangya[root@entestold]#sed'3,$d'b(删除第三行到最后一行)thisisbhello[root@entestold]#[root@entestold]#sed3,$db(注意:双引号错误)sed:-eexpression#1,char2:unexpected`,'[root@entestold]#cat-nb1thisisb2hello3zhelishisan4shisihangya[root@entestold]#sed'/o/d'b(删除包含o的行,注意是删除该行)thisisbzhelishisanshisihangya[root@entestold]#[root@entestold]#cat-nb1thisisb2hello3zhelishisan4shisihangya[root@entestold]#sed'1,+2d'b(删除1+2行,一共删除3行)shisihangya[root@entestold]#[root@entestold]#sed'1d'b(删除第1行)hellozhelishisanshisihangya[root@entestold]#sed'2d'b(删除第2行)thisisbzhelishisanshisihangya[root@entestold]#[root@entestold]#catbthisisbhellozhelishisanshisihangyatmpfs/dev/shmtmpfsdefaults00devpts/dev/ptsdevptsgid=5,mode=62000sysfs/syssysfsdefaults00proc/procprocdefaults00/etc/fstab/dev/pts[root@entestold]#sed'/^\//d'b(删除以/开头的行)thisisbhellozhelishisanshisihangyatmpfs/dev/shmtmpfsdefaults00devpts/dev/ptsdevptsgid=5,mode=62000sysfs/syssysfsdefaults00proc/procprocdefaults00[root@entestold]#2.p:显示符合条件的行,-n‘5p’。显示aa文档的第8行:[root@entestold]#sed-n'8p'aafindthisisok![root@entestold]#显示aa文档的最后一行:[root@entestold]#sed-n'$p'aa/dev/pts[root@entestold]#显示aa文档8到10行:[root@entestold]#sed-n'8,10p'aafindthisisok!zheshishouhang.zhangdawei[root@entestold]#显示以/线开头的行:[root@entestold]#sed'/^\//p'b(注意没有-n的显示,符合条件的显示2次默认)thisisb(匹配的显示2次,不匹配的显示1次)hellozhelishisanshisihangyatmpfs/dev/shmtmpfsdefaults00devpts/dev/ptsdevptsgid=5,mode=62000sysfs/syssysfsdefaults00proc/procprocdefaults00/etc/fstab/etc/fstab/dev/pts/dev/pts说明:’/^//p’同//引起来,加\转义符,就是//p---///p--/^\/p了。[root@entestold]#sed-n'/^\//p'b(加选项-n的显示,表示不显示模式空间中的内容)/etc/fstab(并且只显示匹配的行)/dev/pts[root@entestold]#查找匹配boot的行:[root@entestold]#catb1thisisb1dsvdsvsdsdsdbootbinbootsdsdsdfsdsdsdevBOOT[root@entestold]#sed-n'/boot/p'b1dsvdsvsdsdsdbootbootsdsdsdfsdsds[root@entestold]#查找有is的行:[root@entestold]#sed-n'/is/p'b1thisisb1!thisistestlianxi!ok!thankis.[root@entestold]#3.a\string(a空格\内容)表示在指定的行后面追加新行,内容为“string”。在b文档中第二行加入#shuomingshuo:[root@entestold]#sed2a\#shuomingshuob(格式:行a空格斜线要加入的东西)thisisbhello#shuomingshuozhelishisan[root@entestold]#把xinjiaru加入b文档的第二行中:[root@entestold]#cat-nb|sed“2axinjiaru”1thisisb2helloxinjiaru3zhelishisan[root@entestold]#在以/开头的行下加入#hellozhang:[root@entestold]#sed'/^\//a\#hellozhang'bthisisbhellozhelishisanshisihangyatmpfs/dev/shmtmpfsdefaults00devpts/dev/ptsdevptsgid=5,mode=62000sysfs/syssysfsdefaults00proc/procprocdefaults00/etc/fstab#hellozhang/dev/pts#hellozhang[root@entestold]#[root@entestold]#sed'/^\//a987654321111111111111111111111111111'b(以/开头下行加)/etc/fstab987654321111111111111111111111111111/dev/pts987654321111111111111111111111111111[root@entestold]#4.i\string(i空格\内容)表示在指定的行前面追加新行,内容为“string”。[root@entestold]#sed'/^\//i\#hellozhang'b(在指定/前加入#hellozhang)thisisbhellozhelishisanshisihangyatmpfs/dev/shmtmpfsdefaults00devpts/dev/ptsdevptsgid=5,mode=62000sysfs/syssysfsdefaults00proc/procprocdefaults00#hellozhang/etc/fstab#hellozhang/dev/pts[root@entestold]#在第二行前面加入#shuomingshuo:[root@entestold]#sed2i\#shuomingshuobthisisb#shuomingshuohellozhelishisan[root@entestold]#5.rfile(r空格文件路径)用于让某个文件内容显示在某个文件中部位置将指定的文件内容添加到符合条件的行处。(2,5r表示在第2行