web-dev-qa-db-ja.com

制御文字を含む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

それをどのように達成できるか考えていますか?

3
user162124

PuTTYで非常に大きなスクロールバックを有効にし、ログファイルをcatし、結果をコピーして新しいファイルに貼り付けます。

4
Mark Wagner

完璧ではありませんが、このsedフィルターは出発点になります。

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

サンプルをそのフィルターにパイプすると、次のようになります。

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

コマンド/スクリプトに依存して実際の端末コードを解析するソリューションは、より洗練されたものになります。これは、より「迅速な修正」です。

それらを学ぼうとしている人のための正規表現の内訳:

  • 交替を目的とした外括弧(|文字はOR)
  • \[および\]はエスケープされた角括弧であるため、文字クラスとして解釈されません。
  • []文字クラスが含まれています。 [A-Z]は、任意の大文字に一致するためのクラスです。
  • +は、「前のアトムの1つ以上」と一致することを示します。前のatomは文字クラスだったので、「1つ以上の大文字」。
  • ?は、前のatomがオプションであることを示します。この場合、オプションのatomは\]
  • この時点での複合的な意味:「リテラル[、オプションでリテラルの接尾辞]が前に付いた1つ以上の大文字の出現」
  • |文字はORの始まりです。
  • \]0;は 'リテラル]に一致し、接尾辞は0; `です。

置換文字列は空なので、削除されます。 /gsedに最初の一致で停止しないように指示します。

1
Andrew B