以下は、私が試したgrepコマンドラインの例です。
grep '(565172|565173|565175)' /var/log/cups/error_log
3つの値すべてがファイルに複数回表示されても出力は生成されません。
バーを脱出しようとしましたが、状況はやや改善されました。中間値は検出されますが、最初または最後の値は検出されません。
grep '(565172\|565173\|565175)' /var/log/cups/error_log
また、2回脱出しようとしましたが、結果は返されませんでした。
grep '(565172\\|565173\\|565175)' /var/log/cups/error_log
私は何が間違っていましたか?ありがとうございます。
答え1
あなたが直面したのは、基本正規表現と拡張正規表現の違いです。 grepのマニュアルページから:
デフォルトの正規表現では、メタ文字?、+、{、|、(および)が特別な意味を失います。代わりに、バックスラッシュバージョン\?、+、{、\|、(および)が使用されます。
したがって、次のいずれかを実行できます。
grep '\(565172\|565173\|565175\)' /var/log/cups/error_log
または
grep -E '(565172|565173|565175)' /var/log/cups/error_log
-Eフラグは「拡張」正規表現を有効にします。 GNU grepはPerl準拠の正規表現もサポートしています。
答え2
使用したい構文は拡張正規表現に属するので、答えは非常に簡単です。egrep
対応する-E
フラグを使用または含めます。