我想替换之前包含abc
但不包含的所有单词。KLM
abc
比如"dasdasKLMabc"
不应该改,但是"dasabc"
好替换,我想替换abc
为rrr
。
sed 似乎不支持后视。但是你可以在 perl 中相当容易地做到这一点:
sorin@sorin:~$ echo -e "llalaabc\nKLMabc" | perl -pe 's/(?<!KLM)abc/rrr/'
llalarrr
KLMabc
sorin@sorin:~$
据我所知,GNU sed 不支持前瞻和后瞻。解决您的问题的一种简单方法是KLMabc
用一些“唯一”字符串替换,替换所有abc
s 然后将唯一字符串替换回KLMabc
sed 's/KLMabc/#####/g' <input_file> | sed 's/abc/rrr/g' | sed 's/#####/KLMabc'
或者
sed 's/KLMabc/#####/g' -e 's/abc/rrr/g' -e 's/#####/KLMabc' <input_file>