web-dev-qa-db-ja.com

grep入力でカラーコードを保持するにはどうすればよいですか?

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

echo "foo bar" | grep foo | grep bar

その後、最初のパターン( "foo")は強調表示されません。実際、grepは入力からカラーコードを削除しているようです。これを防ぐ方法はありますか?

15
Chris2048

--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

ID2013fooに色を付けます。

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

IDfooは色付けしますが、2013は色付けしません。

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


場合によっては、端末の色in fileが必要になることがあります。たとえば、.

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

ただし、結果のファイルの移植性は非常に制限されます。


カラーリング自体も拡張です。


良い @ slm で述べたように、以下を追加できます。

export GREP_OPTIONS="--color=always"

あなたの.bashrcなどにしかし、何らかの理由でその影響を本当に理解していて、それでもやりたいのでない限り、しないでください。上記の事実により、多くの点でgrepが壊れます 1

頻繁に使用する場合は、aliasを追加します。

 alias cgrep='grep --color=always'

GREP_OPTIONSおよび--colorつのオプションを選択neverautoおよびalways。最初の2つは、GREP_OPTIONSで考慮される唯一のものでなければなりません。

manページまたは gnu grepGREP_COLORSをチェックアウトすることもできます。

23
Runium