当将带有颜色的关键字 grep 管道输出到文件时,不会保留颜色。

11 浏览
0 Comments

当将带有颜色的关键字 grep 管道输出到文件时,不会保留颜色。

我正在尝试使用grep命令对一个文件进行搜索,并使用颜色突出显示关键词,然后将美化的输出内容替换到原文件或输出到一个新文件中。\n我的文件user.log生成正确,当我运行以下命令时:\n

grep --color -E -i "Error|$" user.log

\n我可以在终端上看到正确的输出。然而,当我尝试将输出内容输出到一个文件中,命令如下:\n

grep --color -E -i "Error|$" user.log > user_pretty.log 

\n颜色选项消失了(内容仍然存在,但只是黑白显示)。\n另外,当我尝试输出并替换原文件时,命令如下grep --color -E -i \"Error|$\" user.log > user.log,内容消失了(当我运行cat命令时,显示为空白)。\n我不能将带颜色选项的输出内容重定向到一个新文件吗?

0
0 Comments

当在Bash中使用管道将带有颜色关键字的grep命令输出到文件时,会出现颜色不保留的问题。这个问题的原因是,默认情况下,--color(假设是GNU grep,但其他支持颜色的grep版本可能类似)的缩写为--color=auto,这意味着只有在grep确定其标准输出是终端时,输出才包含适当的转义序列。如果要在写入文件时强制保留颜色,可以使用--color=always

然而,使用此选项将颜色关键字grep输出到文件后,用于查看文件的工具可能会根据其自己的设置解释这些字节。使用cat user_pretty.log命令只会将所有内容写入终端,并且会像没有重定向一样解释它们。如果在编辑器中打开文件,您可能会看到编辑器对非可打印字符的表示。

因此,为了解决这个问题,可以在使用grep命令时添加--color=always选项,以保持颜色输出。这样,当将输出重定向到文件时,颜色将保留在文件中。但需要注意的是,使用不同的工具打开文件时,可能会出现不同的颜色显示效果。

0