如何将脚本命令输出转换为纯文本

GD-*_*ukh 2 command-line bash scripts gnome-terminal console

我用来script-command将终端的输出保存到文件中。

但是,它提供了一些额外的字符,例如square-like字符和其他文本加密字符。

man script命令告诉,通过使用-q标志/选项,它给出了相当的输出,而不将开始和完成消息写入标准输出,但它不会删除额外的字符。

这里

我怎样才能得到以下信息:

1)使输出文件与终端输出完全相同,删除多余的字符。

2)在生成的文件中,由于纯文本没有颜色(与终端不同),我无法直接弄清楚input commands,因为我输入的输出和命令出现相同的字体,

我可以使命令比其余输出更粗体或更容易识别吗?

Rav*_*ina 5

如果您结帐:

man script | grep -i bugs -A 2
Run Code Online (Sandbox Code Playgroud)

你可以看到:

脚本将所有内容放入日志文件中,包括换行符和退格键。这不是天真的用户所期望的。


我想出的是 和 的结合,trsed获得我们想要的东西。

大多数这些字符都指示颜色,要删除其中大部分,我们可以从这里sed使用此命令:

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"
Run Code Online (Sandbox Code Playgroud)

然而这仍然不够......因为正如我们在脚本中看到的那样,man我们应该删除其他不可打印的字符。要删除它们,我们可以简单地使用:

tr -dc '[[:print:]]\n'
Run Code Online (Sandbox Code Playgroud)

现在我们就快到了,我测试中的另一个问题是提示重复两次,因此要删除scriptdumpandTERM的 value开头的提示TERM=dump


最后结果:

  1. 捕获命令:

    TERM=dump script my_output
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除不需要的字符:

    sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" my_output | tr -dc '[[:print:]]\n' > new_output
    
    Run Code Online (Sandbox Code Playgroud)

对于问题的第二部分,输出文件只是一个文本文件,因此我们无法更改它的特定行的字体或大小,但是您的输出包含提示,因此您会知道哪一行是命令,哪一行是命令是输出。

  • 使用 `TERM=dump script -a` 附加... (3认同)