标签:
sed [-r] -e ‘sed脚本‘ 文件路径
备注:
一般情况下,既可以使用“双引号(“”)”,也可以使用“单引号(‘’)”,来括起“sed脚本”,但是在有些情况下,使用“双引号(“”)”会导致命令解析错误。
根据预先设定的规则,对文件内的内容进行编辑,以“行”为基本操作单元。
“-r”:表示sed脚本中使用的正则表达式是扩展正则表达式(即GNU ERE),而不是基本正则表达式(即GNU BRE)。
“-e sed脚本”:指定需要执行的sed脚本。
“文件路径”:待修改内容的文件路径。
sed脚本可以写得十分复杂,但是我们一般只需用sed脚本完成“增删改”操作即可。“增删改”的操作范围有“整体范围”和“指定范围”之分。
操作对象是文件内所有内容。
为了方便进行实验,特建立文件“a.txt”,它的内容如下:
hello
world
“增”可分为“行前增”和“行后增”。相应的sed脚本语法分别为:i\text
和a\text
。
执行sed -e ‘i\1‘ a.txt
命令,结果如图1所示。
图1
执行sed -e ‘a\1‘ a.txt
命令,结果如图2所示。
图2
相应的sed脚本语法为d
。
执行sed -e ‘d‘ a.txt
命令,结果如图3所示。图3表示所有内容被删除,打印内容为空。
图3
“改”可分为“整行替换”,“字母替换”和“字符串替换”。
相应的sed脚本语法为:c\text
。
执行sed -e ‘c\dsl‘ a.txt
命令,结果如图4所示。
图4
相应的sed脚本语法为:y/source/dest/
。注意“source”和“dest”中字母数量必须一致,“source”中某个位置的字母会被替换成“dest”中对应位置的字母。
执行sed -e ‘y/abcde/ABCDE/‘ a.txt
命令,结果如图5所示。
图5
相应的sed脚本语法为:s/regexp/replacement/
。注意在“replacement”中可以有以下两类特殊字符:“\0”和“\1-9”。“\0”表示指代完整正则表达式所匹配的内容,“\1-9”表示相应的正则表达式单元所匹配的内容。
执行sed -r -e ‘s/el/lelele/‘ a.txt
命令,结果如图6所示。
图6
执行sed -e ‘s/[l]+/lelele/‘ a.txt
命令,结果如图7所示。
图7
执行sed -r -e ‘s/[l]+/lelele/‘ a.txt
命令,结果如图8所示。
图8
图7和图8的结果验证了加“-r”选项与不加“-r”选项的区别,加“-r”选项表示使用“GNU ERE正则表达式”,而不加“-r”选项表示使用“GNU BRE正则表达式”。
执行sed -r -e ‘s/([l]+)(o|d)/\0\2\0/‘ a.txt
命令,结果如图9所示。
图9
这是实验了“replacement”中的“\0”和“\1-9”这两类特殊字符。
操作对象是文件指定范围内的内容,最常见的指定范围的方式是“通过正则表达式(这里使用的正则表达式是‘GNU ERE’还是‘GNU BRE’,依旧由上面提及到的‘-r’选项所控制)”,具体的语法形式如下,其中加上“!”表示最终的“指定范围”是“/regexp/”所指定范围的补集范围:
/regexp/[!]
举例子进行说明,现在有一个文件“b.txt”,内容如下:
###a comment
hello world
###b comment
执行sed -r -e ‘/[#]+/d‘ b.txt
命令,结果如图10所示。
图10
执行sed -r -e ‘/[#]+/!d‘ b.txt
命令,结果如图11所示。
图11
关于“GNU ERE和GNU BRE”的介绍见《正则表达式语法合集》。
参考文献:
[1]man sed
标签:
原文地址:http://blog.csdn.net/dslztx/article/details/51338857