論理演算子を使用してgrep検索を実行できるようにするgrepのようなユーティリティはありますか。論理構造を自由にネストおよび結合できるようにしたいと考えています。たとえば、次のようなものが可能です。
grep (term1 && term2) || (term1 && (term3 xor term4)) *
これはバニラのgrepと追加のbashスクリプトを使用して実行できることを理解していますが、ここでの目標はそれを回避することです。
論理演算子を使用してgrep検索を実行できるようにするgrepのようなユーティリティはありますか。論理構造を自由にネストおよび結合できるようにしたいと考えています。たとえば、次のようなものが可能です。
grep (term1 && term2) || (term1 && (term3 xor term4)) *
これはバニラのgrepと追加のbashスクリプトを使用して実行できることを理解していますが、ここでの目標はそれを回避することです。
回答:
grep
論理演算子を使用する方法はたくさんあります。
OR条件の\|
複数のパターンを区切るために使用
します。
例: grep 'pattern1\|pattern2' filename
この-E
オプションを使用して、OR
条件の複数のパターンを送信します。
例: grep -E 'pattern1|pattern2' filename
-e
1つのパターンを使用すると1つのパターンのみが-e
一致しますが、複数のオプションを使用すると複数のパターンと
一致します。
例: grep -e pattern1 -e pattern2 filename
grep -v
NOT操作をシミュレートできます。
にはAND演算子はありませgrep
んが、オプションを使用して、ブルートフォースでANDをシミュレート-E
できます。
例: grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
上記の例は、pattern1とpattern2の両方をどちらかの順序で含むすべての行 と一致します。
grep foo | grep bar
ANDを行うより一般的な方法です。
sed '/term1/!d;/term2/b' -e '/term3/!d;/term4/d' *
私はそれがあなたがやろうとしていることを達成すると信じています。これは、d
出力と一致しない任意の行からeletes term1
それは、b
スクリプトのうち牧場(およびautoprintsので)任意の行ことに変わりはないし、その試合term2
、それが一致しないいずれかを削除したままライン用term3
と試合を行うものいずれかからterm4
。
sed
スクリプトは順番に評価され、すべてのテストはブール値であるため、テストから生じるアクションは、後続のアクションの動作に直接影響します。
-E
&&
順序に敏感であるという事実のために完全に同等ではありません