【问题标题】:Bash when piping colored keyword grep to file it doesn't hold the color [duplicate]将彩色关键字 grep 输送到文件时的 Bash 不包含颜色 [重复]
【发布时间】: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 变量中给出的类型)在将所述输出写入相同内容时以彩色呈现周围内容。试图区分这些案例让我觉得这是一种诡辩。

标签: linux bash grep


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-13
    • 2011-10-13
    • 2021-12-04
    • 1970-01-01
    • 2021-09-28
    • 2021-12-23
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多