Eliminando los caracteres de escape del registro de pantalla de GNU Screen.% N

14

¿Es posible eliminar las secuencias ESC en el archivo de salida de GNU Screen? Cosas como colores, pestañas y otros caracteres de escape llegan a los archivos de registro y se vuelven difíciles de descifrar.

He intentado con el Dr. Google & Co. y he leído el manual, pero no he podido encontrar nada adecuado ...

¿Quizás he pasado por alto algo?

Shaond
fuente

Respuestas:

11

Prueba esta pieza de magia Perl:

perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0
Whitequark
fuente
Gracias por eso, ¡eso es INCREÍBLE! Todavía tiene los caracteres ^ G y ^ M allí, pero es mucho más legible ...
shaond
1
Agregó eso a la expresión.
whitequark
Me pregunto cuántas caras ASCII hay en ese revestimiento. Dejé de contar alrededor de 20.
John T
44
Por supuesto que puedo escribir otra frase que los cuente.
whitequark
10

Use ansifiltro.

ansifilter screenlog.txt > screenlog.txt.clean
ene
fuente
¿Es eso algo en cada sistema Linux o algo que necesita ser instalado?
Journeyman Geek
@JourneymanGeek ni siquiera está en los repositorios de Ubuntu, por lo que diría que no es exactamente popular. Parece que tiene que obtenerlo usted mismo de la página del proyecto y ejecutarlo / compilarlo usted mismo. No lo llamaría exactamente un programa popular ansifilter.sourceforge.net
Simon Sheehan
Estoy en OSX y lo usé brew install ansifiltery funcionó a las mil maravillas.
thekingoftruth
1
No sé cómo ha cambiado esto desde los comentarios de 2012 sobre la distribución, pero encontré esto en el repositorio de la versión actual de Fedora (22).
dmh
10

Pruebe también la opción -r o -R de less.

less -r screenlog.0
dex
fuente
Buena solución Se ocupa de todos los caracteres ^ H (eliminar) correctamente, muestra barras de progreso sin el ^ M cruft, e incluso conserva mi mensaje de color. Por supuesto, a veces mostrar un registro no es suficiente.
Quantum7
5

Una vez que capture su sesión en screenlog.n, puede transferir el archivo al terminal y luego usar el comando de copia impresa de la pantalla para volcar la salida del archivo a un archivo. El resultado le proporcionará una salida limpia que no tiene ninguna secuencia de escape.

El único 'problema' parece ser asegurarse de que la copia impresa captura cada momento en el búfer de desplazamiento y que el búfer de desplazamiento contiene solo lo que desea capturar.

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 

Tenga en cuenta que -h garantiza que capture todo el historial de desplazamiento y no solo lo que está a la vista inmediata

El archivo screenlog.n.cleaned ahora contendrá una copia impresa de la salida cat y no incluirá ninguna secuencia de escape.

Joel Verks
fuente
Muy muy aseado . El resto de unliner perl / sed / python me falló. Muy frustrante al pensar que menos -r / más manejaban mi archivo directamente. Una sugerencia wc -lno funcionó para mí. Devolvió 28226, pero realmente necesitaba 33031 en mi caso.
malat
4

Uso el stringscomando para hacer que un registro de pantalla sea legible. Bajo Debian es parte del paquete binutils.

Como dice su página de manual:

cadenas: encuentre las cadenas imprimibles en un objeto u otro archivo binario

blasio
fuente
2

Si es screenusuario, la solución de copia impresa en pantalla sugerida por publicación de Joel Verks funcionará mejor, suponiendo que tenga un gran desplazamiento hacia atrás definido en su .screenrc:

defscrollback 10000

entonces harías:

  1. Muestra tu screenlog archivo:

    $ cat screenlog.<screen_window_num>
    
  2. Use hardcopy -h(vea la página del manual de la pantalla) para guardar el contenido de la ventana actual y su búfer de desplazamiento en el hardcopy.#archivo:

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