如何清理 linux 'script' 命令的输出

And*_*rew 45 linux script

我正在使用 linux 'script' 命令 http://www.linuxcommand.org/man_pages/script1.html来跟踪一些交互式会话。输出文件包含不可打印的字符,包括我的退格键。

有没有办法整理这些输出文件,以便它们只包含屏幕上显示的内容?

或者是否有另一种方法来记录交互式 shell 会话(输入和输出)?

Arc*_*ege 37

如果要查看文件,则可以通过col -bp; 这解释了控制字符。然后,如果您愿意,您可以减少管道流量。

col -bp typescript | less -R
Run Code Online (Sandbox Code Playgroud)

在某些系统上col不接受文件名参数,请改用以下语法:

col -bp <typescript | less -R
Run Code Online (Sandbox Code Playgroud)

  • 在我的系统上,`col` 不接受文件名,所以我做了 `col -bp &lt; typescript ` 并得到了我想要的。 (2认同)

Mye*_*yer 23

cat typescript | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > typescript-processed
Run Code Online (Sandbox Code Playgroud)

这是对字符串输入的一些解释perl

  • s/pattern//g表示对整个g输入字符串进行替换(该选项表示进行整个操作而不是在第一个替换时停止)输入字符串

这是对正则表达式模式的一些解释:

  • \e 匹配特殊的“转义”控制字符(ASCII 0x1A)
  • (并且)是一个组的开始和结束
  • |表示该组可以匹配 N 个模式之一。其中 N 个模式是
    • [^\[\]] 或者
    • \[.*?[a-zA-Z] 或者
    • \].*?\a
  • [^\[\]] 方法
    • 匹配一组 NOT 字符,其中 not 字符[]
  • \[.*?[a-zA-Z] 方法
    • 匹配以开头的字符串,[然后执行非贪婪.*?直到第一个字母字符
  • \].*?\a 方法
    • 匹配以开头的字符串,]然后执行非贪婪操作,.*?直到您遇到称为“警报(铃)字符”的特殊控制字符


小智 5

我用cat filename它删除了控制字符:-)

  • 实际上 cat 根本不删除控制字符,而是逐字输出它们,然后终端解释它们。如果您的打字稿相对于终端缓冲区来说很短,并且您只需从终端复制和粘贴,那么这可能对您有用。如果你的打字稿很大,那就不太好了。 (14认同)