linux - 当将彩色关键字 grep 传递到文件时,Bash 不保存颜色

标签 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 时它只是空白)。

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

最佳答案

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

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

关于linux - 当将彩色关键字 grep 传递到文件时,Bash 不保存颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50356770/

相关文章:

linux - 从一个单位为 2 行的文件中随机选择(单位)。

linux - 从 bash 搜索 jar 或 tar

grep - 使用 grep 捕获操作系统名称

c - 通过 argv 操作进程名称和参数

linux - 如何在凌晨 1 点到凌晨 2 点每 5 分钟执行一次 cron

linux - 在 linux mint 上安装 laravel

linux - 最后期望的指令没有执行

bash - sed/awk - 如何删除少于 3 列的行

regex - 使用 grep 与单个空格进行匹配

Linux watch 命令在脚本中不起作用