Entfernen der Escape-Zeichen aus dem Screenlog von GNU Screen.% N.


14

Ist es möglich, die ESC-Sequenzen in der Ausgabedatei von GNU Screen zu entfernen? Dinge wie Farben, Tabulatoren und andere Escape-Zeichen gelangen in die Protokolldateien und sind schwer zu entschlüsseln.

Ich habe Dr. Google & Co. ausprobiert und das Handbuch gelesen, konnte aber nichts Passendes finden ...

Vielleicht habe ich etwas übersehen?

Antworten:


11

Probieren Sie dieses Stück Perl-Magie aus:

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

Danke dafür - das ist super! Es hat immer noch die Zeichen ^ G und ^ M, aber es ist viel besser lesbar ...
— shaond

1
Das wurde dem Ausdruck hinzugefügt.
— Whitequark

Ich frage mich, wie viele ASCII-Gesichter sich in diesem einen Liner befinden. Ich hörte gegen 20 auf zu zählen.
— John T

4
Natürlich kann ich einen weiteren Einzeiler schreiben, der sie zählt.
— Whitequark

10

Verwenden Sie einen Ansifilter.

ansifilter screenlog.txt > screenlog.txt.clean

Ist das etwas in jedem Linux-System oder etwas, das installiert werden muss?
— Geselle Geek

@JourneymanGeek es ist nicht einmal in den Ubuntu-Repos, also würde ich sagen, es ist nicht gerade beliebt. Sieht so aus, als müssten Sie es selbst von der Projektseite herunterladen und selbst ausführen / kompilieren. Würde es nicht genau ein beliebtes Programm nennen ansifilter.sourceforge.net
— Simon Sheehan

Ich bin auf OSX und verwendet brew install ansifilterund es hat wie ein Zauber funktioniert.
— thekingoftruth

1
Ich weiß nicht, wie sich dies seit den Kommentaren zur Distribution von 2012 geändert hat, aber ich habe dies im Repo für die aktuelle Version von Fedora (22) gefunden.
— dmh

10

Versuchen Sie auch die Option -r oder -R von weniger.

less -r screenlog.0

Schöne Lösung. Es behandelt alle ^ H-Zeichen (Löschen) richtig, zeigt Fortschrittsbalken ohne die ^ M-Cruft an und behält sogar meine Farbaufforderung bei! Natürlich reicht es manchmal nicht aus, ein Protokoll anzuzeigen.
— Quantum7

5

Sobald Sie Ihre Sitzung in screenlog.n erfasst haben, können Sie die Datei auf das Terminal übertragen und dann mit dem Hardcopy-Befehl des Bildschirms die Ausgabe der Katze in eine Datei kopieren. Das Ergebnis liefert Ihnen eine saubere Ausgabe ohne Escape-Sequenzen.

Das einzige Problem besteht darin, sicherzustellen, dass die Hardcopy alles im Scrollback-Puffer erfasst und dass der Scrollback-Puffer nur das enthält, was Sie erfassen möchten.

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 

Beachten Sie, dass -h sicherstellt, dass Sie den gesamten Scrollback-Verlauf erfassen und nicht nur das, was sofort angezeigt wird

Die Datei screenlog.n.cleaned enthält jetzt eine Hardcopy der Cat-Ausgabe und keine Escape-Sequenzen


Sehr sehr ordentlich . Alle anderen Perl / Sed / Python-Einzeiler sind für mich fehlgeschlagen. Sehr frustrierend, wenn ich denke, dass weniger -r / mehr meine Datei direkt verarbeiten. Ein Vorschlag wc -lhat bei mir nicht funktioniert. Es gab 28226 zurück, brauchte aber in meinem Fall wirklich 33031.
— Malat

4

Ich benutze den stringsBefehl, um ein Bildschirmprotokoll lesbar zu machen. Unter Debian ist es Teil des binutils-Pakets.

Wie die Manpage sagt:

Zeichenfolgen - Suchen Sie die druckbaren Zeichenfolgen in einem Objekt oder einer anderen Binärdatei


2

Wenn Sie screenBenutzer sind, funktioniert die von Joel Verks 'Beitrag vorgeschlagene Bildschirm-Hardcopy- Lösung am besten - vorausgesetzt, Sie haben einen großen Scrollback definiert in :.screenrc

defscrollback 10000

dann würden Sie tun:

  1. Zeigen Sie Ihre screenlogDatei an:

    $ cat screenlog.<screen_window_num>
    
  2. Verwenden Sie hardcopy -h(siehe Bildschirmmanpage), um den aktuellen Fensterinhalt und seinen Scrollback-Puffer in der hardcopy.#Datei zu speichern:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.