2012-05-25 13 views
11

Tengo un archivo que contiene los códigos de color:archivo de visualización con códigos de color escapado - mensajes de arranque de demonio bootlog

Fri May 25 17:13:04 2012: [....] Starting MTA: exim4^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0c. 
Fri May 25 17:13:05 2012: [....] Loading cpufreq kernel modules...^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0cdone (acpi-cpufreq). 

¿Cómo puedo mostrar lo coloreada en un terminal de Linux?

+3

¿'cat' no funciona? –

+0

cat funciona solo después de que '^ [' se reemplaza por su equivalente octal '033', vea mi propia respuesta a continuación. – ripat

Respuesta

13

Para completar, el archivo que contiene todas estas secuencias de escape es generado por el bootlogd daemon (paquete bootlog en la familia Debian) que captura todos los mensajes coloreados enviados a la consola durante el arranque. En la consola, estos mensajes se muestran primero como la siguiente línea:

[....] Starting periodic command scheduler: cron 

entonces, cuando se ejecuta el servicio o mando, una secuencia de escape se envía a la consola para cambiar la posición del cursor al principio de la línea y grabados ok, fail, información, etc ... advierten

[ ok ] Starting periodic command scheduler: cron. 

todos estos mensajes son capturados por el bootlogd demonio y se escriben en un archivo con todas sus secuencias de escape que incluye el reposicionamiento. No hay problema, excepto que ^[ debe reemplazarse por octal 033 para que el archivo se muestre correctamente. Pero, como hay una captura, el daemon también agrega un sello de fecha delante del mensaje sin cambiar las coordenadas de la secuencia de reposicionamiento del cursor. En consecuencia, ok, fail etc ... los mensajes sobrescriben parte del sello de fecha. No está bien.

Fri May 25 17:13:01 2012: [....] Starting periodic command scheduler: cron 
becomes... 
[ ok ay 25 17:13:01 2012: [....] Starting periodic command scheduler: cron. 

La solución es cambiar la secuencia de posicionamiento del cursor. Por intento y error, encontré esa secuencia como ^[1G. El siguiente comando sed finalmente hacer el trabajo:

sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot 

la bootlogd demonio debe purgar toda la secuencia de escape antes de enviar los mensajes de la consola en el archivo. ¿Podemos llamar esto un error?

Este "error" también puede estar presente en todos los herederos de Debian como Ubuntu, Mint, etc ...

+0

+1 Mismo problema aquí. Su 'sed' formatea correctamente el registro. Esto es para mí un error claro, y dado que en debian el paquete 'bootlogd' trata sobre el registro:" _bootlogd registra todos los mensajes impresos en la consola del sistema durante el arranque del sistema y los registra en un archivo de registro._ "(' dpkg -s bootlogd' of bootlogd ver. 2.88dsf-22.1), lo considero crítico. – Alberto

+1

La salida se puede canalizar a 'menos -r'. Eso funciona bien para mí, excepto una sola línea de registro de /etc/init.d/kbd en Debian Wheezy. – mivk

4

respuesta tanto de ripat no funcionó para mí. Encontré una alternativa en la wiki de Debian: https://wiki.debian.org/bootlogd.

Al momento de escribir esto es:

sed $'s/\^\[/\E/g' /var/log/boot 

Para la versión bootlogd < 2,88 (sin impresión de fecha). Para las versiones posteriores:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot 

Esta última formatea todas las líneas menos una de mi registro a la perfección, con solo una pequeña discrepancia. Tenga en cuenta también que, como se señala en el informe de error para este problema, el $ líder en el patrón sed hace que estas soluciones sean específicas para bash.

+0

Eso funcionó para mí también, con la excepción de una línea FAIL, que tenía un montón de texto sin sentido después del FAIL. – Jez

2

podría utilizar la fiesta de muebles empotrados:

$ echo "$(< /your/file)" 
+0

Esto funcionó muy bien para mí para obtener una salida coloreada de una salida de consola Jenkins. – dragon788

+0

Funcionó perfectamente para obtener una salida de color desde /var/log/boot.log Solo quería ver si era factible ... y de hecho lo es. – user1003916

+0

Intenté esto y funciona. Pero para archivos de datos más grandes, quería paginar la salida (para navegación y búsqueda también), así que traté de pasarla por 'less'. Desafortunadamente, 'less' eliminó la coloración y reemplazó los códigos de caracteres con sus equivalentes legibles para humanos. –

1

Trate less -R /your/file.

Encontré que more de manera predeterminada realmente hace lo que esperaría: muestra texto coloreado en una terminal. El hecho de que more funcionó, mientras que less (es un primo más joven) no me hizo mirar la página man less.

Resulta que less es compatible con el indicador -R, que emite las secuencias ESC como caracteres de control sin formato. Este es el mismo comportamiento que obtienes con more, además de todas las mejoras de búsqueda y navegación que vienen de manera estándar con less.

Cuestiones relacionadas