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