grepとegrepでORによるマッチングを行う際に注意すること

grepでは "\|" を使い、egrepでは "|" を使わなくてはいけない。

$ cat sample
aaa
abc
def
$ grep 'def\|efg' sample
def
$ egrep 'def|efg' sample
def


なお、grepで "\|" を使う場合は、GNU grepであるかどうかを確認したほうがいいようだ。

\|

これら二つの演算子は、選択を行なうためのものです。演算子の左右に置かれた部分正規表現のいずれかにマッチします。 ^X|0 は先頭にXがある文字列か、0を含む文字列にマッチします (^と|は両方とも正規表現演算子ですが、その優先順位は ^が上のため、このような解釈になります)。 \|は、GNU grepGNU sedで用いられる等価な演算子です。これは他の処理系では使えないでしょう。

正規表現メモ