grepの後にlsの色付けを保持する に類似した質問がありますが、色付きのgrep出力を別のgrepにパイプすると、色付けが保持されないことに悩まされます。
例としてgrep --color Word * | grep -v AVOID
は、最初の出力の色を保持しません。しかし、私にとってはls | grep FILE
色を維持するのはなぜですか?
grep
は、パイプへの書き込み時などに、カラー出力を無効にすることがあります。 grep --color=always
でこの動作をオーバーライドできます
正しいコマンドラインは
grep --color=always Word * | grep -v AVOID
これはかなり冗長です。あるいは、次の行を追加することもできます。
alias cgrep="grep --color=always"
たとえば.bashrc
に追加し、cgrep
を色付きgrepとして使用します。 grep
を再定義すると、grep
の特定の出力に依存し、asciiエスケープコードが気に入らないスクリプトで問題が発生する可能性があります。
アドバイスの言葉:
grep --color=always
を使用すると、次のパイプに渡される実際の文字列が変更されます。これにより、次の状況が発生する可能性があります。
$ grep --color=always -e '1' * | grep -ve '12'
11
12
13
オプション-ve '12'
は中央の行を除外する必要がありますが、1
と2
の間に色文字があるため除外されません。
パイプの最後で同じgrepコマンドを繰り返すだけです。grep Word * | grep -v AVOID | grep -v AVOID2 | grep Word