製品の構成を手伝ってくれる請負業者が社内にいて、彼が設定した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
それをどのように達成できるか考えていますか?
PuTTYで非常に大きなスクロールバックを有効にし、ログファイルをcat
し、結果をコピーして新しいファイルに貼り付けます。
完璧ではありませんが、この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は\]
。|
文字はORの始まりです。\]0;
は 'リテラル]に一致し、接尾辞は0; `です。置換文字列は空なので、削除されます。 /g
はsed
に最初の一致で停止しないように指示します。