grepコマンドで複数のANDを実行する方法

grepコマンドで複数のANDを実行する方法

grepコマンドで複数のANDの組み合わせを実行しようとしていますが、次の2つのモードを使用して実行できます。

grep -E 'pattern1.*pattern2' filename

上記の方法では、3〜4つのパターンを使用できますか?

答え1

パターンの順序が固定されている場合は、grep次のように簡単に使用できます。

grep -E 'pattern1.*pattern2.*pattern3'

ただし、すべてのパターンが存在しなければならず、任意の順序で表示できる場合、たとえば2つのパターンの場合、組み合わせは複雑になります。

grep -E '(pattern1.*pattern2|pattern2.*pattern1)'

(3つのモードにはすでに8つの組み合わせがあります)。

この場合(つまり、を使用する場合)、パターンごとに1つのインスタンスを持つパイプラインで呼び出しをカスケードで配置することをお勧めしgrepます。grep

grep pattern1 <infile | grep pattern2 | grep pattern3

各インスタンスはそのパターンに一致する行のみをフィルタリングし、結果全体にはすべてのパターンを持つ行のみが含まれます。

最も明確な解決策を得るためのより良い方法は、次のものを使用することですawk

awk '/pattern1/ && /pattern2/ && /pattern3/'

このような表現では順序は重要ではありません。

答え2

はい。必要な正規表現を設定して、コマンドでパターンとして使用できますgrep。有効な正規表現でなければなりません。

関連情報