web-dev-qa-db-ja.com

grepの複数の単語の「または」の正規表現

[Computer]$ grep "foo|bar" filename

上記のコマンドは、「foo」または「bar」が存在するファイル名の各行を返す必要があることを理解しています。マニュアルページで確認します|正規表現またはシンボルとコードが「foo」と「bar」に対して独立して機能するため。何が欠けていますか?

12
Ocasta Eshu

grepはデフォルトで基本正規表現(BRE)を使用します。 manページから:

基本正規表現と拡張正規表現:基本正規表現では、メタ文字?、+、{、|、(、および)は特別な意味を失います。代わりに、円記号バージョンの\?、+、{、\ |、(、および)を使用します。

したがって、|をエスケープする必要があります。

grep "foo\|bar" filename 

または、拡張正規表現をオンにします。

grep -E "foo|bar" filename
21
jhenninger