Answers:
使用时--color=auto
,grep将突出显示匹配的字符串,前提是(且仅当)将输出直接写入终端并且该终端能够显示彩色输出。
通常,--color=auto
这就是您想要的。例如,如果使用grep匹配URL并将其通过管道传递到Wget,则Wget将看到\e[1;31mhttp://...
而不是实际的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
,Windows的最新Grep版本(2.5.4)以及基于它的原始2.5.4都会在且仅当条件为输出时为输出着色
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
为true,即,且仅当将输出写入终端时,才定义环境变量TERM
且终端不哑。
由于TERM
通常没有定义,因此在Windows下不会产生所需的行为。解决此问题的简单方法是TERM=windows
在控制面板中进行设置。
grep(2.14)的最新版本通过以下方式为输出着色,从而解决了此问题:
isatty(STDOUT_FILENO) && should_colorize()
是正确的,should_colorize()
对于POSIX和Win32的定义不同:
对于前者,条件等于2.5.4中的一个。对于后者,TERM
不需要设置enviroment变量(就不能设置dumb
)。
sdgstd.h
,则istty(stdout)
返回0
是否将输出重定向到文件。
grep
和less
自GnuWin项目(gnuwin32.sourceforge.net)。实用性cmd.exe
得到改善ansicon
。less --color=auto
正常工作:不应用重定向时使用颜色,在重定向输出时不使用颜色。但是grep --color=auto
在两种情况下都不会输出转义序列。