を含み、直前に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
を置き換えてから、一意の文字列を次のように置き換えることです。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>