将彩色关键字grep传递给文件时Bash不保持颜色

时间:2018-05-15 18:12:30

标签: linux bash grep

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

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

1 个答案:

答案 0 :(得分:2)

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

(用于查看的文件可能会或可能不会按预期解释这些字节。cat user_pretty.log只会将所有内容写入终端,这将解释它们的相同内容。您刚刚运行grep而没有重定向。如果您在编辑器中打开文件,您可能会看到编辑器对不可打印字符的表示。)