我有这样的文字:
Hi
... OK ... Replace ...
... BAD ... Replace ...
Hi
我想替换所有"替换"字符串"完成"当且仅当"坏"不在同一条线上的任何地方。因此,应该修改的唯一一行是我给出的示例中的第二行。我努力做到这一点,我尝试了以下不起作用:
perl -i'' -pe 's/^(?!BAD)Replace/$1Done/g' TEST
这可以用我试图做的单个表达式来完成吗?
答案 0 :(得分:6)
你试图在一个正则表达式中做太多。这更直接,更容易正确
perl -pe "s/Replace/Done/ unless /BAD/" mydata
<强>输出强>
Hi
... OK ... Done ...
... BAD ... Replace ...
Hi
答案 1 :(得分:2)
如果该行只有一个Replace
,您可以使用
s/^(?!.*BAD.*Replace)(.*)Replace/$1Done/
预测为否定将检查此行BAD
之前是否有Replace
。如果是,请将Replace
替换为Done
。
答案 2 :(得分:1)
如果这是您的意思,您可以使用sed
执行此操作:
sed -i -e '/BAD/!s/Replace/Done/' TEST