我有一个二进制程序,它在终端上输出中间结果,并始终重写该行。在内部,它可能使用system("echo -e '\rsome_useful_number')
。
所以我看到和想要记录的是(顺序):
data 1
,data 2
,data 3
,...
当我作为脚本的一部分运行./program | tee log.txt
,./program>log.txt
等时,我得到的是last_result
。
如何调整我的脚本以“插入”缺少的换行符?
答案 0 :(得分:0)
CR表示“返回当前行的开头”。 因此,下一行将覆盖前一行。这意味着所有行都在那里,但只有最后一行是可见的。
运行less log.txt
代替cat log.txt
会显示如下内容:
first_line^Mnext_line^Mlast_line
正如@anubhava所说:
./program | tr '\r' '\n' | tee log.txt
或./program | tr '\r' '\n' >log.txt
会在写入文件之前解决此问题,或者只使用cat log.txt | tr '\r' '\n'
来查看文件。
P.S。:实际上你应该使用tr '\r' '\n' < log.txt
来避免UUoC - 奖励:)
<强>更新强>
当程序输出到stderr时,必须首先将stderr添加到stdout:
./program 2>&1 | tr '\r' '\n' | tee log.txt
最后,如果你想在控制台的stderr上保留原始的CR输出:
./program 2>&1 | tee /dev/stderr | tr '\r' '\n' > log.txt