回答:
を使用--color=auto
すると、出力が端末に直接書き込まれ、その端末が色付きの出力を表示できる場合にのみ、grepは一致する文字列を強調表示します。
通常、--color=auto
あなたが欲しいものです。たとえば、grepを使用してURLを照合し、それをWgetにパイプすると\e[1;31mhttp://...
、実際のURLの代わりにWgetが表示されます(そして、URL が表示されなくなります)。
次のコマンドを実行すると、出力に色が付きます。
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
ただし、このコマンドは次のようにすべきではありません。
echo Super User | grep --color=auto Super | cat
この動作との不整合はバグと見なされます。
を使用する--color=auto
と、最新のGrep for Windowsバージョン(2.5.4)とそれに基づく元の2.5.4-条件が満たされた場合にのみ出力に色を付けます
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
つまり、出力が端末に書き込まれている場合にのみ、環境変数TERM
が定義され、端末はダムではありません。
これTERM
は通常定義されていないため、Windowsで望ましい動作を生成しません。この問題の簡単な解決策TERM=windows
は、コントロールパネルでを設定することです。
最新バージョンのgrep(2.14)は、条件が満たされた場合にのみ出力に色を付けることでこの問題を修正します
isatty(STDOUT_FILENO) && should_colorize()
はtrueで、should_colorize()
POSIXとWin32では定義が異なります。
前者の場合、条件は2.5.4の条件と同じです。後者の場合、環境変数をTERM
設定する必要はありません(単に設定することはできませんdumb
)。
sdgstd.h
、istty(stdout)
返す0
出力をファイルにリダイレクトされている場合。
grep
とless
GnuWinプロジェクトから(gnuwin32.sourceforge.net)。ユーティリティcmd.exe
で改善されていansicon
ます。less --color=auto
期待どおりに機能します。リダイレクトが適用されない場合は色を使用し、出力がリダイレクトされる場合は使用しません。ただしgrep --color=auto
、どちらの場合もエスケープシーケンスは出力されません。