您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > LINUX-sed命令详解
Sed命令是linux下的一个非常有用的命令,特别是在shell脚本中经常会使用到他。熟悉他你会觉得非常有趣哦!1.sed-n'2'pfilename打印文件的第二行。2.sed-n'1,3'pfilename打印文件的1到3行3.sed-n'/Neave/'pfilename打印匹配Neave的行(模糊匹配)4.sed-n'4,/The/'pfilename在第4行查询模式The5.sed-n'1,$'pfilename打印整个文件,$表示最后一行。6.sed-n'/.*ing/'pfilename匹配任意字母,并以ing结尾的单词(点号不能少)7sed-n/-e'/music/'=filename打印匹配行的行号,-e会打印文件的内容,同时在匹配行的前面标志行号。-n只打印出实际的行号。8.sed-n-e'/music/'p-e'/music/'=filename打印匹配的行和行号,行号在内容的下面9.sed'/company/'a\Thensuddenlyithappendfilename选择含有company的行,将后面的内容Thensuddenlyithappend加入下一行。注意:它并不改变文件,所有操作在缓冲区,如果要保存输出,重定向到一个文件。10.sed'/company/'i\Thensuddenlyithappendfilename同9,只是在匹配的行前插入11.sed'/company/'c\Thensuddenlyithappendfilename用Thensuddenlyithappend替换匹配company的行的内容。12.sed'1'd('1,3'd'$'d'/Neave/'d)filename删除第一行(1到3行,最后一行,匹配Neave的行)13.[address[,address]]s/pattern-to-find/replacement-pattern/[gpwn]s选项通知sed这是一个替换操作,并查询pattern-to-find,成功后用replacement-pattern替换它。替换选项如下:g缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。p缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效。-n选项不打印输出结果。w文件名使用此选项将输出定向到一个文件。(注意只将匹配替换的行写入文件,而不是整个内容)14.seds'/nurse/hello&/'filename将'hello'增加到'nurse'的前面。15.sed'/company/rappend.txt'filename在匹配company的行的下一行开始加入文件append.txt的内容。16.sed'/company/'qfilename首次匹配company后就退出sed程序只所以看sed命令,是因为我遇到了这个一个问题。网上有很多教程,他们发表了很多程序代码,但是作者为了解释方便,都对程序作了行号编码,就像下面这样:代码::1:#!/bin/bash2:#renamefileextesions3:#4:#rfeold_extensionsnew_extension假设这个文件名是tmp,那么我们可以使用下面的命令来去掉这个行号和冒号(:)代码::sed-es'/^[0-9]\{1,\}://g'tmp不过上面的命令的命令有一个缺点,那就是如果这个行号不是数字开头,而是有空格的话,那就需要修改匹配规则,规则应该修改为匹配第一个非空白字符是数字开始,后面接一个冒号的配对。命令如下:代码::sed-es'/^[^0-9a-zA-Z]*[0-9]\{1,\}://g'tmp这令我很兴奋,于是想看看sed到底有多厉害,看了以后,明白的是不是sed有多厉害,就像awk一样,他们只是把正规表达式用到了极致。以Redhat6.0为测试环境事实上在solaris下的sed命令要比linux强,但因为没有测试环境,我这里只给在linux下经过测试的用法。★命令行参数简介★首先假设我们有这样一个文本文件sedtest.txt★输出指定范围的行p★在每一行前面增加一个制表符(^I)★在每一行后面增加--end★显示指定模式匹配行的行号[/pattern/]=★在匹配行后面增加文本[/pattern/]a\或者[address]a\★删除匹配行[/pattern/]d或者[address1][,address2]d★替换匹配行[/pattern/]c\或者[address1][,address2]c\★在匹配行前面插入文本[/pattern/]i\或者[address]i\★替换匹配串(注意不再是匹配行)[addr1][,addr2]s/old/new/g★限定范围后的模式匹配★指定替换每一行中匹配的第几次出现★&代表最后匹配★利用sed修改PATH环境变量★测试并提高sed命令运行效率★指定输出文件[address1][,address2]woutputfile★指定输入文件[address]rinputfile★替换相应字符[address1][,address2]y/old/new/★!号的使用★\c正则表达式c的使用★sed命令中正则表达式的复杂性★转换man手册成普通文本格式(新)★sed的man手册(用的就是上面的方法)★命令行参数简介sed-escript指定sed编辑命令-fscriptfile指定的文件中是sed编辑命令-n寂静模式,抑制来自sed命令执行过程中的冗余输出信息,比如只显示那些被改变的行。不明白?不要紧,把这些肮脏丢到一边,跟我往下走,不过下面的介绍里不包括正则表达式的解释,如果你不明白,可能有点麻烦。★首先假设我们有这样一个文本文件sedtest.txtcatsedtest.txtSedisastreameditor----------------------Astreameditorisusedtoperformbasictexttransformationsonaninputstream--------------------------------------------------------------------------------Whileinsomewayssimilartoaneditorwhichpermitsscriptededits(suchased),----------------------------------------------------------------------------------sedworksbymakingonlyonepassovertheinput(s),andisconsequentlymore-----------------------------------------------------------------------------efficient.Butitissed'sabilitytofiltertextinapipelinewhichparticularly---------------------------------------------------------------------------------★输出指定范围的行pothertypesofeditors.sed-e1,4p-nsedtest.txtsed-e/from/p-nsedtest.txtsed-e1,/from/p-nsedtest.txt★在每一行前面增加一个制表符(^I)seds/^/^I/gsedtest.txt注意^I的输入方法是ctrl-vctrl-i单个^表示行首★在每一行后面增加--endseds/$/--end/gsedtest.txt单个$表示行尾★显示指定模式匹配行的行号[/pattern/]=sed-e'/is/='sedtest.txt1Sedisastreameditor----------------------3Astreameditorisusedtoperformbasictexttransformationsonaninputstream--------------------------------------------------------------------------------Whileinsomewayssimilartoaneditorwhichpermitsscriptededits(suchased),----------------------------------------------------------------------------------7sedworksbymakingonlyonepassovertheinput(s),andisconsequentlymore-----------------------------------------------------------------------------9efficient.Butitissed'sabilitytofiltertextinapipelinewhichparticularly----------------------------------------------------------------------------------意思是分析sedtest.txt,显示那些包含is串的匹配行的行号,注意11行中出现了is字符串这个输出是面向stdout的,如果不做重定向处理,则不影响原来的sedtest.txt★在匹配行后面增加文本[/pattern/]a\或者[address]a\^Dsed-fsedadd.scriptsedtest.txtSedisastreameditorAstreameditorisusedtoperformbasictexttransformationsonaninputstreamWhileinsomewayssimilartoaneditorwhichpermitsscriptededits(suchased),----------------------------------------------------------------------------------sedworksbymakingonlyonepassovertheinput(s),andisconsequentlymore-----------------------------------------------------------------------------efficient.Butitissed'sabilitytofiltertextinapipelinewhichparticularly----------------------------------------------------------------------------------[scz@/home/scz/src]sed-ea\\+++++++++---------------------------------------------找到包含from字符串的行,在该行的下一行增加+++++++++。这个输出是面向stdout的,如果不做重定向处理,则不影响原来的sedtest.txt很多人想在命令行上直接完成这个操作而不是多一个sedadd.script,不幸的是,这需要用?nbsp;?nbsp;续行符\,[scz@/home/scz/src]sed-e/from/a\\>+++++++++sedtest.txt[scz@/home/scz/src]sed-ea\\>+++++++++sedtest.txt上面这条命令将在所有行后增加一个新行+++++++++[scz@/home/scz/src]
本文标题:LINUX-sed命令详解
链接地址:https://www.777doc.com/doc-6073959 .html