次の文字列で「bar」が続く場合を除いて、sedの各「foo」インスタンスと一致させる方法を知っている人はいますか?
'foo boo foo foo bar foo foo foo'
望ましい結果(太字の一致したインスタンス)
' MaTcHeD boo MaTcHeD foo bar MaTcHeD MaTcHeD MaTcHeD '
大量のテストの後、私は次のことを発見しました。
sed -e "s/foo\( *\)bar/FOO\1BAR/g" -e "s/foo/MaTcHeD/g" -e "s/FOO\( *\)BAR/foo\1bar/g"
これは、最初に「foo bar」インスタンスを照合し、それらを一時的な文字列(ここでは「FOOBAR」)に置き換え、次に残りの「foo」インスタンスを照合してから、「foobar」インスタンスを元のバージョンに「戻す」ことで構成されます。 ..(私ははっきりしているといいのですが...)
しかし、とにかくこれはまったくきれいではありません。今のところ見つけられなかったとしても、これ以上簡単な方法がないことに驚かされます。
ヒントをいただければ幸いです。:-)
どうもありがとうございます、