【发布时间】:2018-10-25 16:12:15
【问题描述】:
我正在尝试 grep 文件并用颜色突出显示关键字,然后输出美化输出以替换文件或输出到新文件。
我的文件被正确生成user.log,当我运行这个时:
grep --color -E -i "Error|$" user.log
我在终端上看到了正确的输出。但是,当我尝试输出到这样的文件时:
grep --color -E -i "Error|$" user.log > user_pretty.log
颜色选项消失(内容仍然存在,但只有黑白)。
另一件事是当我尝试像这样输出和替换文件时grep --color -E -i "Error|$" user.log > user.log 内容消失了(当我运行cat 时它只是空白)。
我不允许将输出定向到带有颜色选项的新文件吗?
【问题讨论】:
-
你想要
--color=always。--color的默认含义是--color=auto,当输出不是到TTY时关闭。 -
重定向输出时,仅重定向输出文本。颜色由您的终端程序应用,它们不能被重定向。另外,日志文件是纯文本文件。纯文本文件只能保留文本,不能保留其他内容。
-
@sid-m,颜色通常通过与其他内容相同的流(stdout/stderr)写入终端,因此并不是用于设置它们的控制序列不能重定向;除非用户明确另外提出请求,否则行为良好的程序会在不写入可以呈现它们的设备时将其关闭。
-
@CharlesDuffy 即使我们设法重定向它们,对应于这些序列的实际字符将被重定向到文件,而不是实际颜色。纯文本文件只是纯文本,它不能包含颜色或格式。
-
@sid-m, ...它可以“包含颜色”每一位,就像程序的输出可以在任何其他意义上“包含颜色”一样,也就是说,它可以包含输出告诉终端(当前在
TERM变量中给出的类型)在将所述输出写入相同内容时以彩色呈现周围内容。试图区分这些案例让我觉得这是一种诡辩。