GD-*_*ukh 2 command-line bash scripts gnome-terminal console
我用来script-command
将终端的输出保存到文件中。
但是,它提供了一些额外的字符,例如square-like
字符和其他文本加密字符。
man script
命令告诉,通过使用-q
标志/选项,它给出了相当的输出,而不将开始和完成消息写入标准输出,但它不会删除额外的字符。
我怎样才能得到以下信息:
1)使输出文件与终端输出完全相同,删除多余的字符。
2)在生成的文件中,由于纯文本没有颜色(与终端不同),我无法直接弄清楚input commands
,因为我输入的输出和命令出现相同的字体,
我可以使命令比其余输出更粗体或更容易识别吗?
如果您结帐:
man script | grep -i bugs -A 2
Run Code Online (Sandbox Code Playgroud)
你可以看到:
脚本将所有内容放入日志文件中,包括换行符和退格键。这不是天真的用户所期望的。
我想出的是 和 的结合,tr
以sed
获得我们想要的东西。
大多数这些字符都指示颜色,要删除其中大部分,我们可以从这里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)
现在我们就快到了,我测试中的另一个问题是提示重复两次,因此要删除script
以dump
andTERM
的 value开头的提示TERM=dump
。
最后结果:
捕获命令:
TERM=dump script my_output
Run Code Online (Sandbox Code Playgroud)删除不需要的字符:
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)对于问题的第二部分,输出文件只是一个文本文件,因此我们无法更改它的特定行的字体或大小,但是您的输出包含提示,因此您会知道哪一行是命令,哪一行是命令是输出。