Rimozione dei caratteri di escape dallo screenlog dello schermo GNU.% N


14

È possibile rimuovere le sequenze ESC nel file di output dello schermo GNU? Cose come colori, tabulazioni e altri caratteri di escape si fanno strada nei file di registro e diventano difficili da decifrare.

Ho provato il Dr. Google & Co. oltre a leggere il manuale, ma non sono riuscito a trovare nulla di adatto ...

Forse ho trascurato qualcosa?

Risposte:


11

Prova questo pezzo di magia Perl:

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

Grazie per questo - è FANTASTICO! Contiene ancora i caratteri ^ G e ^ M, ma è molto più leggibile ...
Shaond

1
Aggiunto questo all'espressione.
Whitequark,

Mi chiedo quante facce ASCII ci siano in quella copertina. Ho smesso di contare circa 20.
John T

4
Ovviamente posso scrivere un'altra riga che li conterà.
whitequark

10

Usa il filtro.

ansifilter screenlog.txt > screenlog.txt.clean

è qualcosa in ogni sistema Linux o qualcosa che deve essere installato?
Journeyman Geek

@JourneymanGeek non è nemmeno nei repository di Ubuntu, quindi direi che non è esattamente popolare. Sembra che devi prenderlo tu stesso dalla pagina del progetto ed eseguire / compilare te stesso. Non lo chiamerei esattamente un programma popolare ansifilter.sourceforge.net
Simon Sheehan,

Sono su OSX e usato brew install ansifiltere ha funzionato come un fascino.
thekingoftruth,

1
Non so come sia cambiato dai commenti sulla distribuzione del 2012, ma l'ho trovato nel repository per l'attuale versione di Fedora (22).
dmh

10

Prova anche l'opzione -r o -R di less.

less -r screenlog.0

Bella soluzione. Gestisce correttamente tutti i caratteri ^ H (elimina), visualizza le barre di avanzamento senza la croce M ^ e conserva anche il mio prompt dei colori! Naturalmente, a volte la visualizzazione di un registro non è sufficiente.
Quantum7,

5

Una volta acquisita la sessione in screenlog.n, è possibile associare il file al terminale e quindi utilizzare il comando hardcopy dello schermo per scaricare l'output del gatto in un file. Il risultato ti fornirà un output pulito che non ha sequenze di escape.

L'unico 'gotcha' sembra essere quello di assicurarsi che la copia cartacea catturi tutto nel buffer di scrollback e che il buffer di scrollback contenga solo ciò che vuoi catturare.

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 

Nota che -h ti assicura di catturare l'intera cronologia di scrollback e non solo ciò che è in vista immediata

Il file screenlog.n.cleaned ora conterrà una copia cartacea dell'output cat e non includerà alcuna sequenza di escape


Molto molto pulito . Tutti gli altri one-liner perl / sed / python sono falliti per me. Molto frustrante quando si pensa che meno -r / more gestiscono direttamente il mio file. Un suggerimento wc -lnon ha funzionato per me. Restituì 28226, ma nel mio caso avevo davvero bisogno di 33031.
Malat,

4

Uso il stringscomando per rendere leggibile un registro dello schermo. Sotto Debian fa parte del pacchetto binutils.

Come dice la sua pagina man:

stringhe: trova le stringhe stampabili in un file oggetto o altro binario


2

Se sei screenutente, la soluzione di copia su schermo suggerita dal post di Joel Verks funzionerà meglio, supponendo che tu abbia un grande scrollback definito nel tuo .screenrc:

defscrollback 10000

allora faresti:

  1. Visualizza il tuo screenlogfile:

    $ cat screenlog.<screen_window_num>
    
  2. Utilizzare hardcopy -h(vedere la pagina man dello schermo) per salvare il contenuto della finestra corrente e il relativo buffer di scorrimento nel hardcopy.#file:

    <Escape key> (Ctrl-a by default)
    :hardcopy -h
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.