自动渲染保存在文件中的程序输出中用于显示进度条等的特殊字符

自动渲染保存在文件中的程序输出中用于显示进度条等的特殊字符

我在 shell 中运行了一个程序并将输出重定向到一个文件。

涉及的程序显示大量移动进度条等。因此输出文件包含特殊字符,例如\r覆盖这些栏中的行。当我cat输入文件时,进度条会重新渲染,这可能会在 ssh 上花费大量时间。

如何创建仅保存进度条最终状态的文本文件?

答案1

您可以通过 过滤输出col -b,例如:

col -b < rawoutput.txt > simplifiedversion.txt

man col

col —
从输入中过滤反向换行

[...]

-b不输出任何退格键,仅打印写入每个列位置的最后一个字符

如果原始文件中使用 ANSI 转义码等内容,结果可能会损坏。

答案2

假设该角色\r是唯一的并且您的台词构成如下

X\rXX\rXXX\rXXXX\rXXXXX

你可以使用 sed 删除最后一个之前的所有内容\r

$ echo $'X\rXX\rXXX\rXXXX\rXXXXX' >myfile
$ sed 's/^.*\r//' myfile
XXXXX
$

相关内容