使用sed向后搜索和替换

jks*_*hah 5 regex perl sed

如何在字符串中搜索特定单词/模式的最后一次出现并将其替换为另一个单词?

例如,搜索单词是aaa和替换单词是zzz

输入: aaa bbb ccc bbb aaa

期望的输出: aaa bbb ccc bbb zzz

s/aaa/zzz/替换第一个单词.是否有其他选项可以反向搜索?

anu*_*ava 5

使用 sed:

x='aaa bbb ccc bbb aaa'
sed 's/\(.*\)bbb/\1zzz/' <<< "$x"

aaa bbb ccc zzz aaa
Run Code Online (Sandbox Code Playgroud)

使用 perl 命令行:

sed 不支持环视,所以如果你想给 perl 一个机会:

perl -pe 's/aaa(?!.*?aaa)/zzz/' <<< "$x"

aaa bbb ccc bbb zzz
Run Code Online (Sandbox Code Playgroud)

  • sed 解决方案通常很丑陋。 (2认同)