【发布时间】:2019-03-16 21:51:29
【问题描述】:
我在多个文件Hello{Some Text}中有以下文本,我想用Some Text替换它。其中Some Text 可能包括平衡括号{ }。例如:Hello{Some { other} Text} 应替换为 Some { other} Text。
在sed、awk、perl 或其他工具中是否有简单的方法来实现这一点?
【问题讨论】:
-
你必须选择perl。尝试
Hello({((?:[^{}]*+|(?1))*)})并替换为\2。在此处查看现场演示regex101.com/r/AIlUV5/1 -
Regex 在直接找到平衡的分隔符方面是出了名的糟糕,而没有一个非常复杂的表达式。一些替代方案是 Text::Balanced 或使用 Parser::MGC 之类的东西标记您的文本。