如何捕获不断变化的一行程序输出?

如何捕获不断变化的一行程序输出?

程序按时间顺序将各个数据行输出到同一行,在每次行写入时覆盖该行。如何捕获其所有输出行并将它们写入以换行符分隔的文件中?常规重定向不会这样做。

答案1

假设这是使用 完成的\r,它将光标返回到当前行的开头而不移动到下一行,并且相关程序将其输出发送到其标准输出,将\r程序输出中的所有字符转换为\n将产生你想要的结果:

yourprogram | tr '\r' '\n' > logfile

查看之间的区别

printf "Hello\rworld\n"

printf "Hello\rworld\n" | tr '\r' '\n'

请注意,如果没有这个,重定向到日志文件将要将所有输出存储在文件中;您可以通过使用less而不是查看文件来看到它cat。 (less将显示\r^M,而不覆盖前一行。)

如果程序直接写入终端,这将无济于事。在这种情况下,您还需要使用能够捕获所有终端输出的程序;一个例子是script

script -c yourprogram logfile

将启动程序并将其所有输出捕获到logfile.您需要处理日志文件中的特殊字符才能理解它 - 这less将帮助您(或任何合理的编辑器)。

相关内容