有人知道如何替换模式,除非它使用sed
匹配某些特定模式吗?
例如,除了“foo
”之外,所有“food
”都应该被替换
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed -r ':a;s/foo([^d]|$)/xxx\1/;ta' file
除非是foo
,否则会替换d
和以下字符。
答案 1 :(得分:1)
如果您对sed的替代方案持开放态度,perl的外观断言很有帮助:
$ perl -E '$s="foofoofoodfoofood"; $s=~s/foo(?!d)/bar/g; say $s'
barbarfoodbarfood
答案 2 :(得分:0)
我猜你没有问到确切的单词匹配,(带字边界)。这很容易。我想你想在字符串上做替换:
foofoofoodfoofood
这是一个sed行,可以解决这个问题:
sed 's/food/\x99/g; s/foo/___/g; s/\x99/food/g'
它将foo
替换为___
。但离开food
,请参阅测试:
kent$ echo "foofoofoodfoofood"|sed 's/food/\x99/g; s/foo/___/g; s/\x99/food/g'
______food___food
如果您真的在寻找单词边界解决方案:
kent$ echo "foo foo food foo food"|sed 's/\bfoo\b/___/g'
___ ___ food ___ food