5

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

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

输入:aaa bbb ccc bbb aaa

期望的输出:aaa bbb ccc bbb zzz

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

4

2 回答 2

5

使用 sed:

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

aaa bbb ccc zzz aaa

使用 perl 命令行:

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

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

aaa bbb ccc bbb zzz
于 2013-09-26T18:33:48.247 回答
1

如果我们反转字符串,通过 sed 更改反转字符串中的第一次出现,然后将结果反转回正常顺序:

#!/bin/bash

str="aaa bbb ccc bbb aaa"
echo "${str}" | rev | sed 's/bbb/zzz/' | rev

如果我们只需要替换一个符号,它就可以正常工作。对于单词,您需要反转模式和替换单词。

于 2017-03-01T19:23:55.860 回答