保持されたカラーコードを入力するためにgrepをどのように使用しますか?

保持されたカラーコードを入力するためにgrepをどのように使用しますか?

次の2つの連続コマンドを使用する場合grep

echo "foo bar" | grep foo | grep bar

これにより、最初のパターン(「foo」)は強調表示されません。実際、grepは入力からカラーコードを削除するようです。これが起こらないようにする方法はありますか?

答え1

使用--color=always

grep出力がパイプ(またはファイル)に行くかどうかを検出します。ファイルに出力するときに最後に必要なのは色です。色は端末のエスケープシーケンスだからです。通常:

foo ^[[01;31m^[[Kbar^[[m^[[K

たとえば、

grep pattern file > result

オーバーライドするには--color=always

grep --color=always pattern file | ...

例:

ファイルがあります:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

それから

grep --color=always ID file | grep --color=always 2013 | grep foo

色を知ってID、。2013foo

grep --color=always ID file | grep 2013 | grep foo

IDには色合いが適用されますが、foo適用されません2013

重要事項1つ追加することも覚えておく必要があります。汚れた色からチェーンの次のコマンドに渡されます。 IDに色を付けると(簡単に)一致できませんID=111


場合によっては、端末の色が必要な場合があります。ファイルに。たとえば、試してみてください。

 grep --color=always foo file > result
 cat result

結果ファイルは移植性が非常に制限されています。


着色すること自体も無理です。


いい人の言葉通り@slm、次を追加できます。

export GREP_OPTIONS="--color=always"

あなたを.bashrc待ってしかし、しないでください。何らかの理由でその意味を本当に理解し、まだそうしたくない限り。上記の事実1はgrep、いくつかの方法で問題を引き起こす可能性があります。

alias定期的に使用する場合は、1つを追加してください。

 alias cgrep='grep --color=always'

GREP_OPTIONSそして--color 3つのオプションを選択してくださいnever、、autoそしてalways。最初の2つだけを考慮する必要がありますGREP_OPTIONS

GREP_COLORSmanページや下でも見ることができますグヌグレブ

関連情報