2017-09-13 9 views
0

に、私は三つの条件の検索を行うことをしようとしていますが、grep3条件とgrep

とANDで結合:

grep -e "b,.*ghkj" 

が、私はできないのですこのようb,ghkjuuuuuuを検索する:

grep -e "b,.*ghkj.*uuuuuu" 

どのように私は3を作成しますgrepで条件と検索?

+0

あなたが書いていることを理解するのは難しいです。いくつかの入力サンプルを追加して、希望の結果を投稿してください – RomanPerekhrest

+0

私は質問が何であるか理解しています、私は現在の提案された編集が待ち行列を最初にクリアするのを待つ必要があります –

+0

私はファイルLinuxで3つの条件を満たしていなくてはなりませんまたは –

答えて

2

のgrepにおけるNOおよびオペレータ(または任意の正規表現言語は、私の知る限り)あり

grep -E -e 'aaa.*bbb' 

マッチ「AAA」の文字の任意の数(.*)、続いて、次いで「BBB」、これはシミュレート含む任意の行を'aaa'と 'bbb'の順番で一致するが、 'bbbaaa'と一致しないという点でANDです。 'aaa'と 'bbb'を含むすべての行を取得するには、すべての可能なケースをカバーするためにOR(|)を使用できます。

grep -E -e 'aaa.*bbb|bbb.*aaa' 

この戦略は、ケース数が指数関数的に増加するため、3つ以上の節に拡張されません。

代わりに、パイプを使用してANDを達成できます。

grep -E -e 'aaa' file | grep -E -e 'bbb' | grep -E -e 'ccc' 
  1. 最初のgrepはfile含む 'AAA' のすべての行を検索して出力します。
  2. 2番目のgrepがこの出力を取り、 'bbb'を含むすべての行を見つけて出力します。
  3. 3番目のgrepがこの出力を取り、 'ccc'を含むすべての行を見つけて出力します。

最後の出力は、「aaa」AND「bbb」AND「ccc」を任意の順序で含むfileの行のみになります。

+0

を投稿してください。 shell_exec(' grep -E -e '。$ yeasrs。'/var/test –

+0

シェルは一重引用符で囲まれた変数を展開しません(例:/ test2/'$ name_file | grep -E -e'。$ id。 '| grep -E -e'。$ id_user。 '"); ) 、 '' grep -E -e "$ years" "/ var/test/test2/$ name_file "| grep -E -e "$ id" | grep -E -e "$ id_user" '' –

+0

同じ問題があります。引用符で間違っています –