sed基本使用(文中所用到的文件内容,见文档最后部分)语法sed'范围(条件)命令'file命令:d:删除范围:使用数字表示多少行(如'35d',表示第35行,不写数字表示每读取一行到模式空间就删除一行)使用“,”表示“到”(如'10,35d',表示第10行到第35行)使用“~”表示“跨步”(步进)(如:'1~2d',表示第1行开始,跨步为2,即1、3、5、7。。。行)也可使用正则表达式指定范围使用正则表达式时必须使用“//”引起来sed'/tom/d'aa,删除包含tom的行sed'/^tom/,/tom$/d'aa,删除以tom开头的行到以tom结尾的行(两行之间)sed'/\btom\b/d'aa,删除包含tom这个单词的行,完全匹配单词,诸如atom、aatom之类的不会被匹配(\\也可以进行单词完整匹配,如\tom\)sed'/\btom\b/,/^tom\d+/d'aa(格式样例,命令有误)s:替换s/old/new/标签file分隔符“/”可替换其他的任意字符(如“#”),在替换内容存在诸如路径这样带有“/”符号的内容时,相对使用转义字符而言,更换分隔符,会使命令相对更简洁old部分可以使用正则表达式,new部分不能使用正则表达式sed's/tom/TOM/'aa,替换tom为TOM,默认只替换每行(匹配行)的第一个匹配sed's/tom/TOM/2'aa,指定替换匹配行的第二个匹配,标签出数字默认为1,可根据实际情况指定数字sed's/tom/TOM/g'aa,替换全部sed'2,5s/tom/TOM/g'aa,替换第2到第5行sed-n'2,7s/tom/TOM/gp'aa,-n:关闭默认输出,不输出到屏幕,使用p标签打印满足条件的行,即实现只打印满足条件的行,而不满足条件行的不再输出sed-n'2,7s/[tT][oO]m/TOM/gp'aa,t和o匹配是不区分大小写(sed-n'/aaa\s/p'aased-n'/\aaa\/p'aa,完全匹配单词aaa的行ping打印,两条命令等效)aa=`hostname`;sed-n'/#ServerName=`hostname`;sed-n/#ServerName替换Apache的配置文件中的servername为本机主机名,以上两条命令等效,sed中变量需要加单引号或者直接把最外层的单引号改成双引号sed's/\/sbin\/nologin/\/bin\/bash/'passwdsed's#/sbin/nologin#/bin/bash#'passwd替换passwd中的/sbin/nologin为/bin/bash,以上两条命令等效,分隔符使用其他字符sed'1{s/tom/TOM/g;s/aaa/AAA/g}'aaased-n'1{s/tom/TOM/pg;s/aaa/AAA/pg}'aaa执行两条sed命令,命令执行流程如下:首先读取第一行到模式空间,因为符合条件,执行第一条sed命令进行替换之后执行第二条命令执行替换,这时模式空间中的内容已经不再是之前读入的文件第一行的内容,而是执行第一条命令替换后的结果sed-e'1s/tom/TOM/g'-e'1s/aaa/AAA/g'aaa-e表示后面的字符作为sed命令,如果只有一个命令,可以省略-esed's/^t../xxx/'aa正则表达式匹配替换把以t开头后面跟2个任意字符再跟一个空格的内容替换为xxx替换时,new部分不能使用正则,但可以使用如下符号:&:表示old的值sed's/tom/-&-/g'aa,替换tom为-tom-,&即为old部分的tom,保留这部分内容,并在两边加上“-”\U:把\U后面的内容全部改为大写sed's/^t../\Uyyy/'aa,正则表达式匹配替换把以t开头后面跟2个任意字符再跟一个空格的内容替换为YYYsed's/^t../y\Uyyy/'aa,替换为yYYY\u:把\u后面的第一个字符改成大写sed's/^t../\uyyy/'aa,正则表达式匹配替换把以t开头后面跟2个任意字符再跟一个空格的内容替换为Yyysed's/^t../y\uyyy/'aa,替换为yYyy\L:把\L后面的内容全部改为小写sed's/^t../Y\LYYY/'aa,替换为Yyyy\l:把\l后面的第一个字符改成小写sed's/^t../Y\lYYY/'aa,替换为YyYY(sed-n's/\[.*\]/\U&/p'smb.conf将smb.conf中[]里的内容,如果是小写就换成大写)\E:代表终止(终止上面四个符号的转换)sed's/^t../y\Uyy\Ey/'aa替换成yYYy分组(group):在old部分相关位置使用()括起来,在new可以引用第一个括号使用\1引用,第二个使用\2引用sed-n's/#\(ServerName\)/\1/p'httpd.confsed-n's/#\(Server\)\(Name\)/\1\2/p'httpd.conf去掉ServerName前的注释,如果第二个命令只写\1和\2中的一个,结果也只保留两个分组中的一个,即Server或Namea:在指定行(匹配行)的下一行添加一行sed'2adns'aa在第2行下一行(即第3行)添加一行“dns”sed'$adns'aa在最后一行的下一行(即最后一行)添加一行“dns”i:在指定行(匹配行)的上一行添加一行sed'1idns'aa在第1行上一行(即第1行)添加一行“dns”sed'2idns'aa在第2行上一行(即第2行)添加一行“dns”sed'$idns'aa在最后一行的上一行(倒数第2行)添加一行“dns”(sed'$idns'aa命令写法可以在几部分间留一些空格方便阅读)c:整行替换,把满足某个条件的行替换sed'/\tom\/casd'aa将有tom这个单词(单词完全匹配)的行,替换为“asd”y:替换y/abc/XYZ/对应的将a替换为X,b替换为Y,c替换为Zsed'y/abc/XYZ/'aa以上的所有操作,仅仅输出到了屏幕,而没有改变原文件。sed-i'y/abc/XYZ/'aa,直接修改原文件,如果命令存在错误,替换操作无法还原sed-i.abc'y/abc/XYZ/'aa,在修改原文件的同时,自动以abc为后缀备份一份原文件,后缀abc可以指定任意字符,如bak在使用-i选项修改原文件时,不要使用-n选项加p标签,否则原文件将被修改为只有执行替换的匹配行,其他行被删除。=:显示行号,不显示具体内容,只显示匹配行的行号sed-n'/\btom\b/='aan:读取下一行,覆盖模式空间内容sed-n'1{n;p}'aa首先读取第一行到模式空间,之后执行第一个命令n,读入下一行(即第二行),覆盖原有模式空间内容,之后执行第二个命令p进行打印,这样打印出来的内容是第二行的内容。N:读取下一行并追加到模式空间sed-n'1{N;p}'aa首先读取第一行到模式空间,之后执行第一个命令N,读入下一行(即第二行),不覆盖原有模式空间内容,追加第二行内容到模式空间,之后执行第二个命令p进行打印,这样打印出来的内容是第一、二行的内容。一个对于N的使用,相对牵强的例子,只为说明相关内容:sed'{N;s/open/OPEN/g};{s/op\nen/OP\nEN/g}'bb在文本中如果需要替换的内容被分行显示了,直接使用s命令无法替换,这样可以使用N命令将下一行一起读入模式空间,在模式空间内的所有内容均被视为一行,只是在追加进去行之前会有换行符\n,因此比如open被换行显示了(如o在第一行,pen在第二行),在N命令读入模式空间后就变成了o\npen这样在替换是就需要加上换行符进行匹配(old部分),这样,如果加入换行符匹配并替换之后,p命令输出的内容就是合并成一行的内容,而不再分行显示,如还要保持原有的分行显示,则需要在替换时,在new部分的相应位置加入换行符。保持空间:相当于一个仓库,用于临时存放数据,不做任何命令操作,所有操作均在模式空间进行,因此模式空间也可理解为一个操作车间。保持空间和模式空间中的命令:x:让保持空间和模式空间的数据互换sed-n-e'x;n'-e'/jingli/{x;p}'ccsed-n'x;n;/jingli/{x;p}'cc先读取第一行,之后交换保持空间和模式空间,保持空间默认为空,之后读入第二行并覆盖模式空间,之后判断模式空间的内容是否为jingli,如果是(匹配),再次交换保持空间和模式空间,并打印模式空间内容。(文件cc中设计奇数行是员工名,偶数行是职务,因此,此命令取得的是职务为jingli的员工名。)h:把模式空间的内容拷贝到保持空间,覆盖保持空间内容sed-n-e'/jingli/!h'-e'/jingli/{x;p}'cc先读取第一行,之后判断模式空间内容是否为jingli,如果不是,则将模式空间的内容拷贝到保持空间,覆盖保持空间内容,之后读入第二行并覆盖模式空间,之后判断模式空间的内容是否为jingli,如果是(匹配),则交换保持空间和模式空间,并打印模式空间内容。(命令设计也是取得职务为jingli的员工名)H:把模式空间的内容拷贝到保持空间,不覆盖保持空间内容(追加)sed-n-e'/jingli/!h'-e'/jingli/{H;x;s/\n//;p}'cc先读取第一行,之后判断模式空间内容是否为jingli,如果不是,则将模式空间的内容拷贝到保持空间,覆盖保持空间内容,之后读入第二行并覆盖模式空间,之后判断模式空间的内容是否为jingli,如果是(匹配),则追加模式空间内容到保持空间,之后交换保持空间和模式空间内容,并打印,将换行符替换成任意字符,可使两行内容合并在一行显示。(将职务为jingli的员工名和职务在同一行显示)g:把保持空间的内容写入到模式空间,覆盖sed-n-e'h;n;g;p'cc首先读取第一行(默认),将模式空间内容写入保持空间,之后读入下一行,再将保持空间内容追加回模式空间,之后打印。(不区分职务,显示员工的名字)G:把保持空间的内容写入到模式空间,追加sed-n-e'h;n;G;p'ccsed-n-e'h;n;G;s/\n/:/;p'cc首先读取第一行(默认),将模式空间内容写入保持空间,之后读入下一行,再将保持空间内容追加回模式空间,之后打印,打印前也可以对换行符进行处理。(将文件中员工名和职务对调)sed中没有自带循环,实现循环需要使用sed的标签功能语法sed':标签范围1命令1:/模式/b标签名'filesed':aas/open/OPEN/;/open/baa'bb标签名为aa,可以是任意字符,首先执行替换命令将open替换成OPEN,之后判断是否还有满足的open,如果还有则再次执行标签aa内的替换命令s命令默认只替换每行第一个,此语句可实现“s///g”的效果附:使用到的文件内容aa:totomaaabbbtomaaatom123aaabbbtomaaatomm123aaabbbtomaaatom333aaabbbtomaaac111tomaaaTOmccccaaaatomaaaaaaaaaaaaaaaaaaatomadfaaa:删除文件aa的第一行bb:openopenopenopenopenopenopenopenopenopenopenopenopneopneopnecc:tomjinglibobzongjianmaryjinglijerryzongjiansmb.conf:#Apubliclyaccessibledirectory,butreadonly,exceptforpeoplein#thestaffgroup;