首页 > 解决方案 > 将彩色关键字 grep 输送到文件时的 Bash 不包含颜色

问题描述

我正在尝试 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它只是空白)。

我是否不允许将输出定向到带有颜色选项的新文件?

标签: linuxbashgrep

解决方案


--color(假设 GNU grep,但对于其他grep支持颜色的版本可能类似)是 的缩写,这意味着如果确定其标准输出是终端--color=auto,则输出仅包含适当的转义序列。grep要在写入文件时强制使用颜色,请使用--color=always.

(您用来查看文件的内容可能会也可能不会按照您的预期解释这些字节。cat user_pretty.log只会将所有内容写入终端,这会将它们解释为就像您刚刚在grep没有重定向的情况下运行一样。如果您在编辑器中打开文件,您可能会看到编辑器对不可打印字符的表示。)


推荐阅读