有没有办法将带有控制字符的 Putty“所有会话输出”日志转换为更易于人类阅读的“可打印输出”日志?

有没有办法将带有控制字符的 Putty“所有会话输出”日志转换为更易于人类阅读的“可打印输出”日志?

我们有一个内部承包商来帮助进行一些产品配置,我们正在尝试查看他为我们设置的腻子日志,但他没有使用“可打印输出”,而是使用了“所有会话输出”,其中包括每个击键,包括“BS”等。由于他有很多很多的拼写错误,使得日志很难阅读。即:

[ESC]]0;root@host:~[BEL][root@host ~]# itm,cm[BS][BS][ESC][K[BS][ESC][Kcmd agent starp[BS]t

是否有某种方法可以智能地去除这些控制字符,以便最终结果是一个人类可读的文件,就像您在“可打印输出”格式中看到的一样?

感谢您的以下建议。我们的主要痛点是 [BS] 控制字符,这会导致:

ls -pg[BS][BS]al P[BS]| greu[BS]p dr

进入:

ls -al | grep dr

知道如何实现吗?

答案1

在 putty 中启用非常大的回滚,cat日志文件,然后将结果复制并粘贴到新文件中。

答案2

尽管并不完美,但这个 sed 过滤器可以为您提供一个起点。

sed -r 's/(\[[A-Z]+\]?|\]0;)//g' escapes.log > noescapes.log

如果我将您的样本通过该过滤器,我会得到:

root@host:~[root@host ~]# itm,cmcmd agent starpt

依靠命令/脚本来解析实际终端代码的解决方案会更加优雅,这更像是一种“快速修复”。

对于那些正在尝试学习正则表达式的人来说,正则表达式的细分如下:

  • 外括号用于交替(|字符为 OR)
  • \[\]是转义的方括号,因此它们不会被解释为字符类。
  • [ ]包含一个字符类。[A-Z]是用于匹配任何大写字母的类。
  • +表示匹配“一个或多个前一个原子”。前一个原子是字符类,因此是“一个或多个大写字母”。
  • ?表示前一个原子是可选的。在本例中,可选原子是\]
  • 此时的组合含义是:“出现一个或多个大写字母,前面加上文字 [,后面也可以加上文字 ]”
  • |字符是 OR 的开头。
  • \]0;匹配“以 0; 为后缀的文字 ]”。

替换字符串为空,因此它们被删除。/g告诉sed不要在第一次匹配时停止。

相关内容