O problema não é seu script Perl (que deve ser desnecessário), mas ansi2html
, que está incompleto.
O arquivo de log mostra que algo imprimiu algum texto e, em seguida,
- adicionou repetidamente a seqüência de escape para limpar o restante da linha
\E[K
- adicionando alternadamente um backspace.
Em ansi2html
, o script localiza as seqüências de escape e, em seguida, ignora todas, exceto algumas das que encontra, ou seja,
self.ansi_codes_prog = re.compile('3\\[' '(\[\d;\]*)' '(\[a-zA-z\])')
Livrar-se das coisas repetidas é mais simples em um loop. Aqui está um script alternativo que funciona em torno dos problemas vistos em ansi2html
para o seu exemplo:
#!/usr/bin/perl -w
while (<>) {
my $save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^0]0\e\[K//;
}
$save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^0]0//;
}
s/\e\[\?[;0-9]*[0-6]//g;
s/\e\][^\a]*\a//g;
print;
}
e (chamando isso de filterit
), use assim:
./filterit < 1.log | ansi2html >1.html