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


15

grepたとえば、2つの連続したコマンドを使用する場合:

echo "foo bar" | grep foo | grep bar

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


同じ答えの別の質問:どのように色付きの出力をbash関数内のgrepに復元できますか?
カミーユグードセヌ

回答:


23

を使用し--color=alwaysます。

grep出力がパイプ(またはファイル)に対するものかどうかを検出します。出力がファイルへの場合、端末のエスケープシーケンスであるため、ほとんどの場合、色は必要ありません。通常:

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

例から:

grep pattern file > result

useをオーバーライドするには--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

着色IDしますfooが、そうではありません2013

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


場合によっては、ファイルに端末の色必要になることがあります。試してみる

 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 3つのオプションを取るneverautoalways。最初に考慮されるのは2つだけですGREP_OPTIONS

また、チェックアウトする可能性がGREP_COLORSmanページまたはでのGNU grepを


:ここでは、この方法の長所/短所に関する詳細stackoverflow.com/questions/867877/...
SLM

1
これも答えに追加してください:export GREP_OPTIONS="--color=always".bashrcで、オプションをgrepのデフォルトにします。
slm

:このスーパーUuser Q&Aで良いものsuperuser.com/questions/36022/...
SLM

「grepは、出力がパイプ宛であるかどうかを検出します」-ああ!これが重要です。パイプの一部である場合、grepは色付けされません。この種のものに対する代替原則があるはずです:-/
Chris2048

@ Chris2048:これは、ターミナルに色を印刷するほとんどのツールの標準です。これにより、それがどのように検出されるかについて、さらに詳細を見つけることができます。そして、これは、OSXネイティブlsおよびgnu coreutilsのlsや色などの問題を示します。
ルニウム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.