以前の回答に基づく新しいコマンド

以前の回答に基づく新しいコマンド

grep単一の基準を使用して順序に関係なく、複数のパターンに一致する項目を検索する方法はありますか?

図からわかるように複数のANDパターンでgrepを実行する方法は?複数モードの場合に使用できます

grep -e 'foo.*bar' -e 'bar.*foo'

ところでここでは2つの条件を書かなければならず、3つのパターンに6つの条件を書かなければならないように… できれば単一の条件を書きたいと思います。任意の順序でパターンを見つけるには、次のように提案できます。

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)がこれを行うことができるかどうかを知りたいです。

ベストアンサー1

あなたのバージョンがPCREをサポートしている場合grep(GNUはまたはオプションをgrep使用してこれを行う)、プレビューを使用して順序に関係なく複数の単語を一致させることができます。-P--perl-regexp

grep -P '(?=.*?word1)(?=.*?word2)(?=.*?word3)^.*$'

しかし、これは言葉を強調しません。プレビューは、一致するシーケンスの一部ではない長さゼロのアサーションです。

あなたのパイプソリューションはここで動作する必要があると思います。grepデフォルトでは、出力は端末に到達したときにのみ色付けされているため、パイプラインの最後のコマンドのみが強調表示されますが、使用できます--color=always

grep --color=always foo | grep --color=always bar

おすすめ記事