Shell 仅使用CR时插入缺少的换行符
我有一个二进制程序,它在终端上输出中间结果,并且总是重写那一行。在内部,它可能使用类似于Shell 仅使用CR时插入缺少的换行符,shell,Shell,我有一个二进制程序,它在终端上输出中间结果,并且总是重写那一行。在内部,它可能使用类似于系统(“echo-e'\r一些有用的数字”) 因此,我看到并想要记录的是(顺序): 数据1,数据2,数据3 当我在脚本中运行/program | tee log.txt,/program>log.txt等时,我得到的只是最后一个结果 如何调整脚本以“插入”缺少的换行符?CR的意思是“返回到当前行的开头”。 因此,下一行将覆盖上一行。这意味着所有行都存在,但只有最后一行可见 运行less log.txt而不是c
系统(“echo-e'\r一些有用的数字”)
因此,我看到并想要记录的是(顺序):
数据1
,数据2
,数据3
当我在脚本中运行/program | tee log.txt
,/program>log.txt
等时,我得到的只是最后一个结果
如何调整脚本以“插入”缺少的换行符?CR的意思是“返回到当前行的开头”。
因此,下一行将覆盖上一行。这意味着所有行都存在,但只有最后一行可见
运行less log.txt
而不是cat log.txt
应该会显示如下内容:
first_line^Mnext_line^Mlast_line
正如@anubhava所说:
/program | tr'\r'\n'| tee log.txt
或/program | tr'\r'\r'>log.txt
将在写入文件之前修复此问题,或仅使用cat log.txt | tr'\r'\n'
查看文件
注意:实际上你应该使用tr'\r'\n'
来避免奖励:)
更新:
当程序输出到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
CR表示“返回到当前行的开头”。
因此,下一行将覆盖上一行。这意味着所有行都存在,但只有最后一行可见
运行less log.txt
而不是cat log.txt
应该会显示如下内容:
first_line^Mnext_line^Mlast_line
正如@anubhava所说:
/program | tr'\r'\n'| tee log.txt
或/program | tr'\r'\r'>log.txt
将在写入文件之前修复此问题,或仅使用cat log.txt | tr'\r'\n'
查看文件
注意:实际上你应该使用tr'\r'\n'
来避免奖励:)
更新:
当程序输出到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
您可以这样做:
/program | tr'\r'\n'
您可以这样做:/program | tr'\r'\n'
结果是我的程序输出到stderr而不是stdout,所以解决方案没有开箱即用。谢谢。结果是我的程序输出到stderr而不是stdout,所以解决方案没有开箱即用。谢谢。