を含み、直前にabc含まないすべての単語を置換したい。KLMabc
例えば"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を置き換えてから、一意の文字列を次のように置き換えることです。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>