我想将命令的结果输出到控制台和文件。为此,我使用tee
.但我还想从文件中删除 ESC 字符,而不是从控制台输出中删除,因为它会删除着色。我尝试过使用sed -e 's/\x1b\[[0-9;]*m//g'
,它会删除两者的着色和 ESC 。
答案1
我可能会捕获该文件,然后在完成后对文件进行后处理以删除不需要的字符。
如果您需要即时执行此操作,并且使用带有进程替换 ( >(...)
) 的 shell,那么您可以使用其中之一来过滤以下文件输出tee
:
some-command | tee >( sed -e 's/\x1b[[0-9;]m//g' >file )
假设some-command
未连接到终端时仍输出彩色文本,这将通过您的sed
命令过滤输出,然后将修改后的输出传递到名为file
.未修改的输出也按预期some-command
传递到标准输出。tee
如果没有进程替换,这可以sed
单独使用,如下所示:
some-command | sed -n -e p -e 's/\x1b[[0-9;]m//g' -e 'w file'
这用于sed
将未修改的行输出到标准输出(使用p
),然后使用替换表达式进行修改。最后,修改后的行将被file
命令写入w
。使用 关闭编辑脚本末尾修改行的默认输出-n
。