暗黙のANDでマルチパターンを一致させたい パターン間、つまり、複数のグループを順番に実行するのと同じです:
grep pattern1 | grep pattern2 | ...
では、どのように変換するのですか?
grep pattern1 & pattern2 & pattern3
引数を動的に作成しているため、単一のgrepを使用したいので、すべてを1つの文字列に収める必要があります。フィルタの使用はシステム機能であり、grepではないため、それを主張するものではありません。
この質問を次の質問と混同しないでください:
grep "pattern1|pattern2|..."
これはまたはです マルチパターンマッチ。
承認された回答:
agrep
この構文でそれを行うことができます:
agrep 'pattern1;pattern2'
GNU grep
を使用 、PCREサポートを使用してビルドすると、次のことができます。
grep -P '^(?=.*pattern1)(?=.*pattern2)'
ast grep
を使用 :
grep -X '.*pattern1.*&.*pattern2.*'
(.*
を追加 s as <x>&<y>
両方の<x>
に一致する文字列に一致します および<y>
正確に 、a&b
できるような文字列がないため、一致することはありません。 両方のa
およびb
同時に)。
パターンが重ならない場合は、次のこともできる可能性があります。
grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'
ポータブルな方法としては、おそらくawk
を使用するのが最適です。 すでに述べたように:
awk '/pattern1/ && /pattern2/'
sed
を使用 :
sed -e '/pattern1/!d' -e '/pattern2/!d'
これらはすべて、正規表現の構文が異なることに注意してください。