Cómo usar color en el comando tail para resaltar una cadena de texto en tiempo real

Artículos Guías Manuales Sistemas Linux Windows Binario 0

El comando tail es una herramienta muy popular en sistemas Unix y Linux para observar en tiempo real el final de un archivo que está siendo actualizado, como puede ser el caso de logs de sistema o archivos de registro de aplicaciones. Sin embargo, por defecto, no tiene la capacidad de resaltar cadenas específicas en la salida. Para hacerlo, podemos combinar tail con otras herramientas que nos permitan aplicar color a las cadenas de texto, como grep o sed.

Prerrequisitos

  1. Tener instalado un sistema basado en Unix (Linux o macOS).
  2. Familiaridad básica con la terminal y comandos como tail y grep.
  3. Conocer el uso de las secuencias de escape ANSI para colorear texto.

Resaltado de texto usando grep con el comando tail

Una de las maneras más simples de resaltar una cadena de texto al usar tail es utilizando el comando grep con la opción --color. Esta opción resalta las coincidencias de una expresión regular dentro de la salida. El siguiente comando es un ejemplo básico:

tail -f archivo.log | grep --color=always "cadena_a_resaltar"

Explicación del comando:

  • tail -f archivo.log: Esto observa el final de archivo.log en tiempo real. El modificador -f asegura que continuemos viendo el archivo a medida que se añaden nuevas líneas.
  • |: Este símbolo es un pipe, que toma la salida del comando a la izquierda y la pasa como entrada al comando a la derecha.
  • grep --color=always "cadena_a_resaltar": Aquí usamos grep para filtrar y resaltar la cadena que estamos buscando en el log. El flag --color=always asegura que el texto coincidente siempre se muestre en color.

Por ejemplo, si deseas resaltar la palabra "ERROR" en un archivo de log, puedes hacer:

tail -f /var/log/syslog | grep --color=always "ERROR"

Con esto, cada vez que "ERROR" aparezca en el log, se mostrará resaltado en color (generalmente rojo por defecto).

Resaltado múltiple con diferentes colores

El comando anterior funciona bien si solo estás buscando una cadena. Sin embargo, en muchos casos, querrás resaltar diferentes palabras con distintos colores. Aquí es donde podemos combinar el uso de sed o múltiples expresiones de grep.

Usando grep con expresiones regulares alternadas

Si deseas resaltar varias palabras diferentes con el mismo color, puedes usar grep con expresiones regulares alternadas:

tail -f archivo.log | grep --color=always -E "ERROR|WARNING|INFO"

Esto resaltará las palabras "ERROR", "WARNING" e "INFO" en el mismo color. Para diferenciar con colores múltiples, se recomienda utilizar sed o una herramienta más avanzada como ccze o multitail.

Resaltado de múltiples colores con sed

Usar sed para resaltar múltiples palabras con diferentes colores requiere trabajar con las secuencias de escape ANSI. Estas secuencias permiten aplicar colores específicos a las cadenas de texto coincidentes.

Ejemplo:

tail -f archivo.log | sed --unbuffered \
-e 's/ERROR/\x1b[31m&\x1b[0m/g' \
-e 's/WARNING/\x1b[33m&\x1b[0m/g' \
-e 's/INFO/\x1b[32m&\x1b[0m/g'

Explicación del comando:

  • sed --unbuffered: Procesa la salida de manera inmediata, para que las coincidencias se resalten en tiempo real.
  • s/ERROR/\x1b[31m&\x1b[0m/g: Aquí se reemplaza la palabra "ERROR" con la misma palabra, pero rodeada de secuencias ANSI que aplican color. \x1b[31m es el código para el color rojo, y \x1b[0m es el código para restablecer el color.
  • \x1b[33m es el código para el color amarillo, que se aplica a "WARNING".
  • \x1b[32m es el código para el color verde, que se aplica a "INFO".

Usando herramientas especializadas: ccze o multitail

Si la configuración manual de colores se vuelve compleja o si trabajas con logs extensos, existen herramientas que simplifican este proceso. ccze y multitail son dos opciones que permiten visualizar logs con resaltado de sintaxis de manera predeterminada.

Ejemplo con ccze:

tail -f archivo.log | ccze

ccze aplica automáticamente colores a diferentes tipos de mensajes, como errores, advertencias y otros.

Ejemplo con multitail:

multitail archivo.log

multitail permite ver múltiples archivos de log a la vez, con la capacidad de resaltar cadenas de manera avanzada.

Conclusión

Resaltar texto en tiempo real en un archivo de log usando tail es posible al combinarlo con herramientas como grep, sed, o utilidades avanzadas como ccze o multitail. Esta técnica es especialmente útil para depurar aplicaciones o supervisar el comportamiento del sistema, permitiendo que identifiques rápidamente mensajes clave dentro de grandes volúmenes de información.

Con las opciones descritas, puedes mejorar significativamente la legibilidad de tus logs y reducir el tiempo que tardas en identificar problemas críticos.