Tee 从文件中删除字符而不是控制台输出

Tee 从文件中删除字符而不是控制台输出

我想将命令的结果输出到控制台和文件。为此,我使用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

相关内容