复杂的正则表达式替换

复杂的正则表达式替换

sed对正则表达式只有非常基本的支持。

当需要完整的正则表达式库(编辑:PCRE)(例如零宽度负前瞻断言)时,使用的黄金标准工具是什么?

答案1

何时需要完整的正则表达式库(例如零宽度负前瞻断言)?

Lookaheads 来自 Perl 正则表达式,Perl 继承(复制)了sed和的许多功能awk,因此它可能是您想要使用的。

例如,将foo后面的每个 not替换barxxx

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 编码。

相关内容