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

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

我正在使用 Linux 的“脚本”命令 http://www.linuxcommand.org/man_pages/script1.html跟踪一些交互式会话。输出文件包含无法打印的字符,包括我的退格键击键。

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

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

答案1

如果您想查看文件,那么您可以通过 发送输出col -bp;这将解释控制字符。然后,如果您愿意,您可以通过 less 进行管道传输。

col -bp typescript | less -R

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

col -bp <typescript | less -R

答案2

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

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

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

以下是正则表达式模式的一些解释:

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

答案3

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

答案4

对于大量的script输出,我会反复修改 perl 脚本。否则就用好的编辑器手动编辑。

目前不太可能存在一种自动方法,能够从script输出中删除控制字符,从而重现某些重要时刻屏幕上显示的内容(例如,当主机正在等待该第一的一些用户输入的字符)。

例如,屏幕可能除了 之外一片空白Andrew $,如果您随后输入rm /*并按了十二次退格键(远远超过需要),那么最后屏幕上显示的内容取决于正在运行的 shell、您当前的stty设置(您可能会在会话过程中更改这些设置)以及可能的其他一些因素。

以上适用于任何连续捕获输入和输出的自动化方法。主要的替代方法是在会话期间的适当时间进行“屏幕截图”或剪切和粘贴屏幕(这是我为用户指南、日记笔记等所做的)。

相关内容