web-dev-qa-db-ja.com

GNU Screen's screenlog。%nからエスケープ文字を削除する

GNU Screenの出力ファイル内のESCシーケンスを削除することは可能ですか?色、タブ、その他のエスケープ文字などがログファイルに入り込み、解読が困難になります。

Dr. Google&Co。を試したり、マニュアルを読んだりしましたが、適切なものが見つかりませんでした...

おそらく私は何かを見落としましたか?

14
shaond

このPerlマジックを試してみてください:

Perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0
11
whitequark

Ansifilterを使用します。

ansifilter screenlog.txt > screenlog.txt.clean
10
Jan

また、lessの-rまたは-Rオプションを試してください。

less -r screenlog.0
10
dex

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出力のハードコピーが含まれ、エスケープシーケンスは含まれません。

5
Joel Verks

stringsコマンドを使用して、画面ログを読み取り可能にします。 Debianでは、binutilsパッケージの一部です。

そのmanページが言うように:

文字列-オブジェクトまたは他のバイナリファイルで印刷可能な文字列を検索します

4
blasio

あなたがscreenユーザーの場合、 Joel Verksの投稿 によって提案された画面ハードコピーソリューションが最適に機能します- --.screenrcで定義された大きなスクロールバックがあると仮定します。

defscrollback 10000

その後、あなたはするだろう:

  1. screenlogファイルを表示します。

    $ cat screenlog.<screen_window_num>
    
  2. hardcopy -h(画面のマニュアルページを参照)を使用して、現在のウィンドウのコンテンツとそのスクロールバックバッファをhardcopy.#ファイルに保存します。

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
2
Steve McKuhr