Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 仅使用CR时插入缺少的换行符_Shell - Fatal编程技术网

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,所以解决方案没有开箱即用。谢谢。