grep による論理 AND と OR

grep による論理 AND と OR

次の論理演算に一致する行を抽出します。

"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD"). 

つまり、次のような行が必要です:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

つまり、「AB+CD」の線を探しているのです1つまたは両方("nonAB+nonCD" OR "nonAB+CD")。
+ は文字列の一部であることに注意してください。これを算術演算ではなく文字列 (文字) として扱います。

私がやったのは、パイプを使って AND を実行することです。そして、OR には \| を使用します。つまり、私のコマンドは次のようになります:

grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'

1つ目|はパイプ用です。2つ目はgrepの論理ORです。参照grep を使用した論理 OR の例を次に示します。

grep 'pattern1\|pattern2' filename

ターミナルに表示される結果は、コマンドの 2 番目の部分を色付け (検索) します。最初の部分 (パイプの前) は、|色付けされた結果では強調表示されません。私の質問:

1) 私のコマンドは正しいですか?

2) 完全なコマンドの検出結果を色分けするにはどうすればよいですか?

答え1

オプションの使用-P(PCRE):

grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt

出力:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

関連情報