回答:
このgrep
コマンドは--color=always
オプションを受け入れるため、使用できます
grep 'keyword1' file.log --color=always | grep 'keyword2'
以下のようgertvdijkポイントうち、このコマンドは非効率的かもしれないが、それはKEYWORD1とKEYWORD2の両方を含むすべての行を探します。異なる色で強調表示する場合は、使用できます
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
keyword2を青で強調表示します。このmt
部分は、grep
このCSIコードを使用して一致するテキストを強調表示することを01;34
意味し、「通常の背景に太字の青い前景」を意味します。
grep -R --color=always keyword1 . | grep keyword2
はずです。出力を再度リダイレクトしていますか(2番目grep
をにパイプするなどless -R
)?その場合--color=always
、2番目にも追加する必要があります。
--color=auto
にが必要になります。grep
'keyword2'
--color=always
あなたがそれをパイプするless
か何かにしたいかもしれないので、答えに追加しました。
の別のインスタンスにパイプするのではなく、実際の正規表現を試してくださいgrep
。例:
grep -E "\<foo\>.*\<bar\>" file
残念ながら、これはキーワードがこの順序でのみ一致する一致する行に制限されます。とにかく、grep
あなたの質問での使用はかなり非効率的であり、あなたはそれを避けるべきです。おそらく、@ DanielHの答えは、あなたの場合にはかなり簡単です。
キーワードの「または」マッチングには、これを定期的に使用します。
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
あるのか、それともこの場合に必要なのかはわかりません(おそらく、キーワードの標準的な順序を持つログファイルのようです)。更新する前に答えを追加しましたが、連鎖grep
sが本当に必要な場合(またはのように、色付きの出力を端末に送信すべきでない場合grep | less -R
)に備えて、それを保持します。