GNU Screenの出力ファイル内のESCシーケンスを削除することは可能ですか?色、タブ、その他のエスケープ文字などがログファイルに入り込み、解読が困難になります。
Dr. Google&Co。を試したり、マニュアルを読んだりしましたが、適切なものが見つかりませんでした...
おそらく私は何かを見落としましたか?
このPerlマジックを試してみてください:
Perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0
Ansifilterを使用します。
ansifilter screenlog.txt > screenlog.txt.clean
また、lessの-rまたは-Rオプションを試してください。
less -r screenlog.0
Screenlog.nでセッションをキャプチャしたら、ファイルをターミナルにcatし、screenのhardcopyコマンドを使用してcatの出力をファイルにダンプできます。その結果、エスケープシーケンスのないクリーンな出力が得られます。
唯一の「落とし穴」は、ハードコピーがスクロールバックバッファ内のすべてのものをキャプチャし、スクロールバックバッファにキャプチャしたいものだけが含まれていることを確認することのようです。
1. $ screen
2. $ cd /path/to/screenlog.n directory/
3. $ wc -l screenlog.n
4. $ screen -X scrollback 245 # 245 is the number of lines found from your wc command + 5
5. $ cat screenlog.n
6. $ screen -X hardcopy -h screenlog.n.cleaned
-hを使用すると、すぐに表示されるものだけでなく、スクロールバック履歴全体を確実にキャプチャできます。
Screenlog.n.cleanedファイルには、cat出力のハードコピーが含まれ、エスケープシーケンスは含まれません。
strings
コマンドを使用して、画面ログを読み取り可能にします。 Debianでは、binutilsパッケージの一部です。
そのmanページが言うように:
文字列-オブジェクトまたは他のバイナリファイルで印刷可能な文字列を検索します
あなたがscreen
ユーザーの場合、 Joel Verksの投稿 によって提案された画面ハードコピーソリューションが最適に機能します- --.screenrc
で定義された大きなスクロールバックがあると仮定します。
defscrollback 10000
その後、あなたはするだろう:
screenlog
ファイルを表示します。
$ cat screenlog.<screen_window_num>
hardcopy -h
(画面のマニュアルページを参照)を使用して、現在のウィンドウのコンテンツとそのスクロールバックバッファをhardcopy.#
ファイルに保存します。
<Escape key> (Ctrl-a by default)
:hardcopy -h