Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用sed进行反向搜索和替换_Regex_Perl_Sed - Fatal编程技术网

Regex 使用sed进行反向搜索和替换

Regex 使用sed进行反向搜索和替换,regex,perl,sed,Regex,Perl,Sed,如何搜索字符串中某个特定单词/模式的最后一次出现,并将其替换为另一个单词 例如,搜索词是aaa,替换词是zzz 输入:aaa bbb ccc bbb aaa 所需输出:aaa bbb ccc bbb zzz s/aaa/zzz/替换第一个单词。是否有其他选项可以反向搜索 使用sed: x='aaa bbb ccc bbb aaa' sed的/\(.*)bbb/\1zzz/'如果我们反转字符串,通过sed更改反转字符串中的第一个匹配项,然后将结果反转回正常顺序,该怎么办 #!/bin/bash

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

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

输入:
aaa bbb ccc bbb aaa

所需输出:
aaa bbb ccc bbb zzz

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

使用sed:
x='aaa bbb ccc bbb aaa'

sed的/\(.*)bbb/\1zzz/'如果我们反转字符串,通过sed更改反转字符串中的第一个匹配项,然后将结果反转回正常顺序,该怎么办

#!/bin/bash

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

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

根据您的示例,您可以将搜索模式定位到行的末尾,即
回显“aaa bbb ccc bbb aaa”| sed's/aaa$/zzz/”
,但这就是所谓的脆弱解决方案。(您可以使用
的s/aaa[]*$/zzz/'
说明行尾的额外空格,但仍然很脆弱;-)。祝你好运。@Sheller如果我想用
yyy
next替换上次出现的
bbb
,该怎么办p这就是为什么我说这是一个脆弱的解决方案,在改变规格的危险;-)。很高兴你得到了答案,这不是很难看吗?我的意思是,我期待一些开关或选择只是为了搜索反向。另外,就很长的行的性能而言,这难道不会搜索整个字符串吗?丑陋???至少它不用编写复杂的命令就能完成任务。你的线路到底有多长?你的解决方案非常有效。没有理由这么说。我只是出于好奇才问的。我还没有计算出确切的长度,但包装时它确实填满了整个屏幕!谢谢你的确认。感谢您的回复。sed解决方案通常很难看。
perl -pe 's/aaa(?!.*?aaa)/zzz/' <<< "$x"

aaa bbb ccc bbb zzz
#!/bin/bash

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