2

を含み、直前にabc含まないすべての単語を置換したい。KLMabc

例えば"dasdasKLMabc"​​は変えてはいけませんが、交換した"dasabc"方が良いので に交換abcしたいですrrr

4

3 に答える 3

3

sed は後読みをサポートしていないようです。しかし、あなたはかなり簡単にperlでそれを行うことができます:

sorin@sorin:~$ echo -e "llalaabc\nKLMabc" | perl -pe 's/(?<!KLM)abc/rrr/'
llalarrr
KLMabc
sorin@sorin:~$
于 2013-03-14T11:56:00.813 に答える
2

私の知る限り、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>
于 2013-03-14T11:48:38.303 に答える
1

を使用できる場合ssedは、Perl スタイルの後読みアサーションを使用できます。

ssed -R 's/(?<!KLM)abc/rrr/g' input.txt

例:

$ echo "dasdasKLMabc dasabc" | ssed -R 's/(?<!KLM)abc/rrr/g'
dasdasKLMabc dasrrr
于 2013-03-14T11:50:38.510 に答える