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?

shaond
quelle

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
Whitequark
quelle
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
Jan.
quelle
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
dex
quelle
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

Joel Verks
quelle
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

blasio
quelle
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
    
Steve McKuhr
quelle