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

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

我正在使用script-command将终端的输出保存到文件。

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

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

这里

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

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

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

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

答案1

如果您结帐:

man script | grep -i bugs -A 2

您可以看到:

脚本将所有内容(包括换行符和退格符)放入日志文件中。这不是新手用户所期望的。


我想到的是将tr和结合起来sed以达到我们想要的效果。

大多数字符都表示颜色,为了删除大多数字符,我们可以使用此sed命令这里

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

但这还不够……因为正如我们在脚本中看到的,man还有其他不可打印的字符需要删除。要删除这些字符,我们只需使用:

tr -dc '[[:print:]]\n'

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


最后结果:

  1. 捕获命令:

    TERM=dump script my_output
    
  2. 删除不需要的字符:

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

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

答案2

我们需要向旧的 /usr/bin/script 命令添加三个选项:

  1. man script通过添加不输出退格键的选项来修复上面提到的 BUG,并记录在案。
  2. 添加 HTML 输出选项。
  3. 添加 MarkDown 输出选项。

相关内容