假设我要更改所有以-et结尾的单词,以使它们改为以-ert结尾
仅需执行简单的sed 's/et /ert /g'
就可以对所有单词然后是另一个单词起作用。但仅当其后跟空格时。也可以在其后跟'。',',',':'或其他字符。对于每种情况运行sed
似乎不是正确的方法。
我要寻找的是“对于AB的每一次匹配,都将A替换为C,但不要碰B”。
由于评论而澄清:
不仅限于单词的结尾。我也想在里面做这个。喜欢:
$ echo "aaetxaa" | sed '?'
aaertxaa
$ echo "aaetyaa" | sed '?'
aaetyaa
因此,仅当匹配以x而不是y结尾时才进行替换。
答案 0 :(得分:2)
我假设仅当et
后跟x
或字符串结尾时,您才想匹配{1>}。
在这种情况下,您可以使用
sed -E 's/et(x|$)/ert\1/g'
请参见online sed
demo:
echo "aaetxaa" | sed -E 's/et(x|$)/ert\1/g'
# => aaertxaa
echo "aaetyaa" | sed -E 's/et(x|$)/ert\1/g'
# => aaetyaa
详细信息
-E
-启用POSIX ERE语法s/
-替换命令,/
是定界符et(x|$)
-LHS:et
后跟x
或捕获到第1组的字符串结尾ert\1
-ert
和组1的值g
-全局标志:匹配并替换一行中的所有匹配项。