[英]Backward search and replace using sed
How to search for the last occurrence of a particular word/pattern in a string and replace it with an another word? 如何在字符串中搜索特定单词/模式的最后一次出现并将其替换为另一个单词?
For example, Search word is aaa
and Replace word is zzz
例如,搜索词是
aaa
,替换词是zzz
Input: aaa bbb ccc bbb aaa
输入:
aaa bbb ccc bbb aaa
Desired Output: aaa bbb ccc bbb zzz
期望的输出:
aaa bbb ccc bbb zzz
s/aaa/zzz/
replaces first word. s/aaa/zzz/
替换第一个单词。 Is there any additional option to search reverse? 是否有其他选项可以反向搜索?
x='aaa bbb ccc bbb aaa'
sed 's/\(.*\)bbb/\1zzz/' <<< "$x"
aaa bbb ccc zzz aaa
sed doesn't support lookarounds so if you want to give perl a chance: sed不支持lookarounds所以如果你想给perl一个机会:
perl -pe 's/aaa(?!.*?aaa)/zzz/' <<< "$x"
aaa bbb ccc bbb zzz
What if we reverse the string, change the FIRST occurrence in reversed string by sed, then reverse the result back to normal order: 如果我们反转字符串,用sed更改反向字符串中的FIRST事件,然后将结果反转回正常顺序怎么办:
#!/bin/bash
str="aaa bbb ccc bbb aaa"
echo "${str}" | rev | sed 's/bbb/zzz/' | rev
It works fine, if we need to replace just one symbol. 如果我们需要替换一个符号,它工作正常。 For words, you need to reverse both, pattern and replacement words.
对于单词,您需要反转单词,模式和替换单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.