Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash将彩色关键字grep管道化到文件时,它不会';我拿不定颜色_Linux_Bash_Grep - Fatal编程技术网

Linux Bash将彩色关键字grep管道化到文件时,它不会';我拿不定颜色

Linux Bash将彩色关键字grep管道化到文件时,它不会';我拿不定颜色,linux,bash,grep,Linux,Bash,Grep,我试图grep一个文件和突出显示的颜色关键字,然后输出美化输出,要么替换文件或输出到一个新的文件 正确生成我的文件user.log,运行此操作时: grep --color -E -i "Error|$" user.log 我在终端上看到正确的输出。但是,当我尝试输出到这样的文件时: grep --color -E -i "Error|$" user.log > user_pretty.log 颜色选项消失(内容仍然存在,但只有黑白) 另一件事是,当我尝试像这样输出和替换文件时,gr

我试图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
一样解释这些字节,而无需重定向。如果您在编辑器中打开文件,您可能会看到编辑器对非字节的表示-可打印字符。)

您需要
--color=always
--color
的默认含义是
--color=auto
,当输出不是TTY时,它会关闭。重定向输出时,只重定向输出文本。颜色由终端程序应用,无法重定向。此外,日志文件是纯文本文件。纯文本文件只能保存文本而不能保存其他内容。@sid-m,颜色通常通过相同的流(stdout/stderr)写入终端与其他内容一样,这并不是说用来设置它们的控制序列无法重定向;而是说,如果不向能够呈现它们的设备写入数据,行为良好的程序会关闭它们,除非用户明确提出其他请求。@CharlesDuffy即使我们设法重定向它们,实际的字符也会相应地关闭。@CharlesDuffy对这些序列的修改将被重定向到文件,而不是实际的颜色。纯文本文件只是纯文本,它不能包含颜色或格式。@sid-m,…它可以“包含颜色”每一位,就像程序的输出可以在任何其他意义上“包含颜色”一样,也就是说,它可以包含告诉终端的输出(当前在
术语
变量中给出的类型)在所述输出写入时以彩色呈现周围内容。试图区分这些情况对我来说是诡辩的练习。