GNUまたはBSD Sedの正規表現置換/または演算子(foo | bar)

GNUまたはBSD Sedの正規表現置換/または演算子(foo | bar)

私はそれを動作させることができないようです。 GNU sed文書はパイプを脱出するように言いますが、それはうまくいきません。かっこを追加しても違いはありません。

$ echo 'cat
dog
pear
banana
cat
dog' | sed 's/cat|dog/Bear/g'
cat
dog
pear
banana
cat
dog

$ echo 'cat
dog
pear
banana
cat
dog' | sed 's/cat\|dog/Bear/g'
cat
dog
pear
banana
cat
dog

ベストアンサー1

基本的にsed使用POSIX基本正規表現|、シフト演算子は含まれません。これを使用するように切り替えることができます。拡張正規表現、これには(またはいくつかの実装のいくつかの以前のバージョンで)|シフトすることが含まれます。あなたはそれを使用することができます:-E-r

echo 'cat dog pear banana cat dog' | sed -E -e 's/cat|dog/Bear/g'

そして互換性のあるシステムで実行されます。 (-eオプションでsedスクリプト自体を表示します。省略することができ、特定の種類のエラーのみを防ぐだけです。)

非常に古いsedsに移植するのは複雑ですが、次のことも可能です。に切り替えるawk必要に応じてどこでもEREを使用してください。

おすすめ記事