本文转载自微信公众号《潜行》,作者cscw。转载本文请联系SneakUp公众号。前言sed的全称是streameditor,是一个用于文本处理的流编辑器,支持正则表达式。当sed处理文本时,它一次处理一行内容。sed语法sed命令处理模式空间中的内容,而不是直接处理文件内容。如果加上参数i,可以直接修改文件内容例子:sed-i's/originalstring/newstring/'/home/test.txtsed[-nefrparameter][function][filePath]选项及参数说明-n使用静默模式。在正常的sed使用中,输入数据输出到屏幕。但是如果加上-n参数,就不会显示了。如果后面跟着p标志,会列出经过sed特殊处理的行。-e直接在命令行界面编辑sed的动作,执行多个子命令-f将sed动作写在一个文件中,-ffilename执行脚本文件的sed动作-rsed动作支持扩展正则的语法表达式-i直接修改读取文件选项-n的内容,加上-n选项设置为安静模式,即默认不会输出打印信息,除非在子命令中指定了printp选项,才thelinethatmatchesthemodificationwillbeprinted----bothlineswillbeprinted----server11:~/test#echo-e'hello\nworld'|sed's/hello/csc/'cscworld----onelineisnotprinted-----server11:~/test#echo-e'hello\nworld'|sed-n's/hello/csc/'----打印匹配行-----server11:~/test#echo-e'hello\nworld'|sed-n's/hello/csc/p'csc选项-e,多个子命令连续运行echo-e'helloworld'|sed-e's/hello/csc/'-e's/world/lwl/'结果:csclwl选项-i,直接修改读取文件内容server11:~/test#catfile.txtthelloworldserver11:~/test#sed's/hello/lwl/'file.txtlwlwlworldserver11:~/test#catfile.txtthelloworld----添加参数i直接修改文件内容----server11:~/test#sed-i's/hello/lwl/'file.txtlwlwlworldserver11:~/test#catfile.txtlwlworld选项-f,执行文件文件脚本sed.script脚本内容:s/hello/csc/s/world/lwl/------echo"helloworld"|sed-fsed.script结果:csclwl选项-r,默认只能支持基本正则expressions如果需要支持扩展正则表达式,需要添加-recho"helloworld"|sed-r's/(hello)|(world)/csc/g'csccscfunctionexpression:[n1[,n2]]functionor/{pattern}/functionn1,n2:可选,一般表示“选择函数处理的行数”,例如“function”需要执行10~20行,则表示为10,20[function]如果需要使用正则表达式来匹配字符串,可以使用/{pattern}/来匹配test.txt的内容111222333444-----删除所有不在第二行和第三行之间的行----------server11:~#sed-i'2,3!d'test.txtserver11:~#cattest.txt222333------正则表达式匹配------------server11:~#echo'clswcl.txt'|sed-nr'/.*/p'clswcl.txt///{pattern}/=/.*/function有如下选项函数descriptiona增加:a后面可以接words字符串,这些字符串会换行出现(当前下一行)iinsert:i后面可以接字符串,这些字符串会换行出现(当前上一行)line)creplace:c的字符串可以在后面连接起来,这些字符串可以替换n1和n2之间的d行。删除:因为是删除,所以在d之后表面通常不连接任何东西pprint:即打印出一个选中的数据,通常p会带参数运行sed-nsreplace:可以直接进行替换工作!通常这个s动作可以用正则表达式来匹配!例如:1,20s/old/new/g函数:-a,在sed-i'/specificstring/anewlinestring'fileName行后插入一个新行函数:-i,在该行之前插入一个新行linesed-i'/specificstring/inewlinestring'fileNamefunction:-c,修改指定内容linesed-i'/specificstring/ccsclwl'fileNamefunction:-d,deletespecificstringsed-i'/specificstring/d'fileNameseds子命令:s/{pattern}/{replacement}/{flags}{pattern}是正则表达式。如果{pattern}有分组,{replacement}中的“\n”代表第n组,“&”代表匹配的整个字符串。有关详细信息,请参阅示例。标志的参数如下。flags描述n可以是1-512,表示第n次出现被替换gglobalchangep打印模式空间的内容wfile写入文件exampleserver11:~#echo-e'hello11??12world'|sed-r's/([a-z]+)([0-9]+)([a-z]+)/&/'hello11??12worldserver11:~#echo-e'hello11??12world'|sed-r's/([a-z]+)([0-9]+)([a-z]+)/\3\2\1/'world1112hello参考文章sed-i命令详解及入门攻略[1]参考[1]sed-i命令详解及入门:https://blog.csdn.net/qq_33468857/article/details/84324609
