将屏幕日志转换为 html

将屏幕日志转换为 html

我想记录在终端窗口中进行的操作,并将日志即时转换为 html。

我已经尝试过命令 script/screen +ansi2html,但结果并不完美:行编辑的转义序列未正确处理,因此在生成的 html 中,我混合了该行的旧版本和新版本。所以如果终端的输出是这样的

$> echo Original text
Original text
$> echo Other
Other

生成的 html 是

$> echo 原文
 原文
 $> echo 其他文本
 其他

任何想法,如何解决这个问题?

答案1

问题不在于你的 Perl 脚本(这应该是不必要的),而是ansi2html它不完整。

日志文件显示某些内容打印了一些文本,然后

  • 重复添加转义序列以清除该行的其余部分\E[K
  • 交替添加一个退格键。

在 中ansi2html,脚本找到转义序列,然后忽略它找到的所有转义序列(除了少数几个),即

self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')

if command not in 'mMA':

在循环中摆脱重复的东西是最简单的。这是一个替代脚本,可以解决ansi2html您的示例中出现的问题:

#!/usr/bin/perl -w

while (<>) {
    my $save = "";
    while ( $save ne $_ ) {
        $save = $_;
        s/[^\010]\010\e\[K//;
    }
    $save = "";
    while ( $save ne $_ ) {
        $save = $_;
        s/[^\010]\010//;
    }
    s/\e\[\?[;0-9]*[\100-\176]//g;
    s/\e\][^\a]*\a//g;
    print;
}

并且(称之为filterit),像这样使用它:

./filterit < 1.log | ansi2html >1.html

相关内容