ターミナルウィンドウで行われた操作を記録し、すぐにログをhtmlに変換したいと思います。
私はコマンドスクリプト/画面を試しました+ansi2htmlしかし、結果は完璧ではありません。行を編集するためのエスケープシーケンスは正しく処理されないため、生成されたHTMLには古いバージョンと新しいバージョンの行が混在しています。したがって、端末の出力が次のような場合
$> echo Original text
Original text
$> echo Other
Other
生成されたHTML
$>元のテキストをエコーします。 オリジナル $>他のテキストをエコーします。 その他
この問題を解決する方法についてのアイデアはありますか?
ベストアンサー1
問題は、Perlスクリプト(不要)ではなくansi2html
不完全であるということです。
ログファイルにはテキストの印刷内容が表示され、
- 行の残りの部分を消去するには、エスケープシーケンスの追加を繰り返します。
\E[K
- またはバックスペースキーを追加してください。
で、ansi2html
スクリプトはエスケープシーケンスを見つけ、見つかったすべてのエスケープシーケンスを無視します(一部を除く)。
self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')
ループから重複したアイテムを削除するのが最も簡単です。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