仅使用CR时插入缺少的换行符

时间:2017-09-25 13:55:22

标签: shell

我有一个二进制程序,它在终端上输出中间结果,并始终重写该行。在内部,它可能使用system("echo -e '\rsome_useful_number')

之类的东西

所以我看到和想要记录的是(顺序): data 1data 2data 3,...

当我作为脚本的一部分运行./program | tee log.txt./program>log.txt等时,我得到的是last_result

如何调整我的脚本以“插入”缺少的换行符?

1 个答案:

答案 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