grep
単一の条件を使用して、任意の順序で複数のパターンに一致するエントリを検索するために使用する方法はありますか?
複数のANDパターンでgrepを実行する方法に示されているように?複数のパターンに使用できます
grep -e 'foo.*bar' -e 'bar.*foo'
しかし、ここでは2つの条件、3つのパターンに対して6つの条件などを記述する必要があります...可能であれば1つの条件を記述したいと思います。任意の順序でパターンを見つけるには、次の使用を提案できます。
grep -e 'foo' | grep -e 'bar' # at least i do not retype patterns here
これは機能しますが、色付きの出力が必要です。この場合、バーのみが強調表示されます。
できるだけ簡単に条件を書きたい
awk '/foo/ && /bar/'
可能であればgrep
(awkは結果を強調表示せず、簡単に実行できるとは思えません)。
agrep
おそらく私がやりたいことを行うことができますが、ubuntu 12.04のデフォルトのgrep(2.10-1)でこれを行うことができるかどうか疑問に思います。
お使いのバージョンがgrep
PCREをサポートしている場合(GNUgrep
は-P
or--perl-regexp
オプションを使用してこれを行います)、先読みを使用して複数の単語を任意の順序で照合できます。
grep -P '(?=.*?word1)(?=.*?word2)(?=.*?word3)^.*$'
ただし、これでは単語が強調表示されません。先読みは長さがゼロのアサーションであり、一致するシーケンスの一部ではありません。
私はあなたの配管ソリューションがそのために働くべきだと思います。デフォルトでgrep
は、端末に送信されるときにのみ出力に色が付けられるため、パイプラインの最後のコマンドのみが強調表示されますが、これを--color=always
。でオーバーライドできます。
grep --color=always foo | grep --color=always bar
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加