GNU Screenのscreenlog。%nからエスケープ文字を削除しています


14

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

Google&Co.博士とマニュアルを試しましたが、適切なものを見つけることができませんでした...

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

回答:


11

次のPerlマジックを試してください。

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

それをありがとう-それは素晴らしいです!それはまだそこに^ Gと^ M文字を持っていますが、その多くの、より読みやすい...
shaond

1
それを式に追加しました。
ホワイトクォーク

その1つのライナーにはASCIIフェイスがいくつあるのだろうか。私は20の周りにカウントを停止
ジョン・T

4
もちろん、それらをカウントする別のワンライナーを書くことができます。
ホワイトクォーク

10

ansifilterを使用します。

ansifilter screenlog.txt > screenlog.txt.clean

それはすべてのLinuxシステムにあるものですか、それともインストールする必要があるものですか?
ジャーニーマンオタク

@JourneymanGeekそれはUbuntuリポジトリにもないので、私はそれが正確に人気があるとは言えないと思います。プロジェクトページから自分で取得し、実行/コンパイルする必要があるようです。正確にそれを人気のあるプログラムansifilter.sourceforge.net
Simon Sheehan

私はOSXを使用brew install ansifilterしていますが、使用してみたところ、魅力的に機能しました。
-thekingoftruth

1
ディストリビューションに関する2012年のコメント以降、これがどのように変化したかはわかりませんが、Fedoraの現在のリリースのリポジトリ(22)でこれを見つけました。
dmh

10

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

less -r screenlog.0

素晴らしい解決策。すべての^ H(削除)文字を適切に処理し、^ Mの残骸なしでプログレスバーを表示し、カラープロンプトも保持します!もちろん、ログを表示するだけでは不十分な場合があります。
Quantum7 2013年

5

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出力のハードコピーが含まれるようになり、エスケープシーケンスは含まれなくなります


とてもきれいです。他のすべてのperl / sed / pythonワンライナーは失敗しました。より少ない-r / moreが私のファイルを直接処理していると考えると非常にイライラします。一つの提案wc -lは私にはうまくいきませんでした。28226を返しましたが、私の場合は本当に33031が必要でした。
マラト14年

4

stringsコマンドを使用して、画面ログを読みやすくします。Debianでは、これはbinutilsパッケージの一部です。

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

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


2

あなたがscreenユーザーである場合、Joel Verksの投稿で提案されているスクリーンのハードコピーソリューションが最適に機能します。.screenrc

defscrollback 10000

それならあなたはそうするでしょう:

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

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

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.