我想替换一个字符串,保留前缀,除非它包含特定的前缀。
例如,任何类似 "(*)-bar"
的字符串都必须替换为 "(*)-blah"
,除非 "(*) "
匹配 "baz"
:
foo-bar => should return foo-blah
baz-bar => should remain baz-bar
到目前为止,我最好的做法是在替换时修剪前缀的最后一个字母:
echo "foo-bar" | sed s/"[^(baz)]-bar"/$1-blah/
最佳答案
使用负向回顾:
s/(?<!baz)-bar/-blah/
大多数 sed
实现没有这种高级正则表达式功能,但它应该可以在更现代的语言中工作,例如 perl。
关于正则表达式:用前缀捕获替换字符串(给定前缀除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277918/