有没有工具来清理脚本(1)工具的输出?

时间:2009-05-27 03:22:08

标签: scripting text-processing terminfo

script(1)是用于保存交互式终端会话记录的工具;默认情况下,它会写入文件transcript。我的问题是我使用了具有readline特性的ksh93,因此转录本被各种终端转义序列混淆,重建实际执行的命令非常困难。更不用说流浪^M等了。

我正在寻找一种工具,它将读取由script编写的脚本文件,删除所有垃圾,并重建shell认为它正在执行的内容,因此我有一些显示$PS1的内容和实际执行的命令。如果做不到这一点,我正在寻找关于如何编写这样一个工具的建议,理想情况下使用来自terminfo数据库的知识,或者使用ANSI转义序列失败。

只要它确实有效,看起来在shell历史中的作弊也是可以接受的。

2 个答案:

答案 0 :(得分:0)

默认情况下,cat / more是否可以用于浏览成绩单?你是否打算用实际执行的命令创建一个脚本(根据我的经验,这可能很危险)?

无论如何,3年没有回答,所以我会用一个不完整的解决方案给它一个镜头。如果您只对实际键入的命令感兴趣,请删除不可打印的字符,然后将PS1'替换为可读且唯一的内容,并将grep替换为该唯一字符串。像这样:

$ sed -i 's/[^[:print:]]//g' transcript

$ sed 's/]0;cartman@southpark: ~cartman@southpark:~/CARTMAN/g' transcript | grep CARTMAN

说明:在第一个sed之后,PS1'可以从成绩单文件的前几行中取出,PS1'与PS1不同 - 并且可以使用唯一可读字符串修改(“CARTMAN” “ 这里)。请注意,提示末尾的美元符号是故意遗漏的。

在我尝试的几个例子中,这并没有解决所有问题,而是处理了大多数问题。

答案 1 :(得分:0)

这与Can I programmatically “burn in” ANSI control codes to a file using unix utils?中最近提出的问题基本相同 - 删除所有非打印字符无法修复

  • 嵌入式转义序列
  • 退格/重写以强调
  • 使用回车来过度打击