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


12
[Computer]$ grep "foo|bar" filename

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

回答:


21

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

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

だからあなたはどちらかをエスケープする必要があります|

grep "foo\|bar" filename 

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

grep -E "foo|bar" filename

manページでそれを見て、誤解しました。それが意味することだと思った\ | 個々の式ではなく、完全な式「foo | bar」を検索します。迅速な対応ありがとうございます!
オカスタエシュ

4
の代わりにegrep(のエイリアスgrep -E)を使用することもできgrepます。
講演者
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.