程序按时间顺序将各个数据行输出到同一行,在每次行写入时覆盖该行。如何捕获其所有输出行并将它们写入以换行符分隔的文件中?常规重定向不会这样做。
答案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
将帮助您(或任何合理的编辑器)。