将颜色保留在标准输出中,但从 T 恤中删除

joh*_*nyB 9 colors text-processing tee ansi

我想在控制台的标准输出中看到颜色输出,但我想在命令输出的捕获副本中将其删除tee。\xc2\xa0\n在我的情况下,

\n
命令_that_writes_color_to_stdout | 三通文件
\n

我希望该文件不含 ANSI 颜色序列等,\因为这使得grep稍后查看日志文件变得有趣:

\n
echo -e "color \\033[1;31mRED\\033[0m output" | tee test.log\n
Run Code Online (Sandbox Code Playgroud)\n

在这种情况下,\n颜色将写入控制台并写入文件“test.log”。

\n
color ^[[1;31mRED^[[0m output\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法只为 的tee输出去除 ANSI 序列到文件?

\n

试图让 tee 看到我的终端不知道颜色(环境变量、子 shell),但tee很高兴只写了它所给出的内容。 \xc2\xa0\nI\xc2\xa0 想要控制台输出的颜色(对于人类消费来说,它是太棒了)\n但不希望输出的日志文件副本中有颜色。

\n
echo -e "color \\033[1;31mRED\\033[0m output" | TERM=dumb tee test.log ; od -c test.log\n
Run Code Online (Sandbox Code Playgroud)\n

我发现很多想要的人在“管道到三通”输出中使用颜色代码(通常当第一个程序意识到某些东西能够显示颜色时),但我没有找到相反的问题/答案。

\n

G-M*_*ca' 10

如果您\xe2\x80\x99使用bash,则可以使用以下命令删除所有颜色(图形再现)

\n
echo -e "color \\033[1;31mRED\\033[0m output" | tee >(sed $'s/\\033[[][^A-Za-z]*m//g' > test.log)\n
Run Code Online (Sandbox Code Playgroud)\n

全部ANSI 转义序列

\n
echo -e "color \\033[1;31mRED\\033[0m output" | tee >(sed $'s/\\033[[][^A-Za-z]*[A-Za-z]//g' > test.log)\n
Run Code Online (Sandbox Code Playgroud)\n

(我已经对此进行了测试,但并不详尽。)

\n

PS 如果要附加到日志文件,\n请>>\xc2\xa0test.log在括号内使用;tee\xc2\xa0-a不会\xe2\x80\x99t做\xc2\xa0it。

\n