![复杂的正则表达式替换](https://linux22.com/image/161791/%E5%A4%8D%E6%9D%82%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9B%BF%E6%8D%A2.png)
sed
对正则表达式只有非常基本的支持。
当需要完整的正则表达式库(编辑:PCRE)(例如零宽度负前瞻断言)时,使用的黄金标准工具是什么?
答案1
何时需要完整的正则表达式库(例如零宽度负前瞻断言)?
Lookaheads 来自 Perl 正则表达式,Perl 继承(复制)了sed
和的许多功能awk
,因此它可能是您想要使用的。
例如,将foo
后面的每个 not替换bar
为xxx
:
perl -pe 's/foo(?!bar)/xxx/g'
该-p
标志给出了sed
类似的行为,即为输入行运行给定代码,然后打印结果。
网上可能有很多 Perl 入门教程。
答案2
如果perl
安装了,可以这样使用:
perl -pe "s/(?<=SomeTextBefore)ReplaceMe(?=SomeTextAfter)/NewText/g"
以下可用于更改文件:
cat source.txt | perl -pe "s/(?<=SomeTextBefore)ReplaceMe(?=SomeTextAfter)/NewText/g" > dest.txt
添加-CS选项如果文件采用 UTF8 编码。