GNU/Linux >> Tutoriales Linux >  >> Linux

Salida de resaltado de color basada en expresiones regulares en shell

Hay una respuesta en superuser.com:

your-command | grep -E --color 'pattern|$'

o

your-command | grep --color 'pattern\|$'

Esto "coincidirá con su patrón o el final de línea en cada línea. Solo se resaltará el patrón..."


Podrías intentar (tal vez necesites un poco más de escape):

BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"

Si desea habilitar esto globalmente, querrá una función de terminal, no un proceso al que canalice la salida, porque una canalización interrumpiría algún comando (dos problemas son que stdout y stderr aparecerían desordenados y almacenado en búfer, y que algunos comandos simplemente se comportan de manera diferente cuando se envían a una terminal).

No conozco ningún terminal “convencional” con esta característica. Se hace fácilmente en Emacs, en un term búfer:configurar font-lock-keywords para term-mode .

Sin embargo, debe pensar detenidamente si realmente desea esa característica todo el tiempo. ¿Qué pasa si el comando tiene sus propios colores (por ejemplo, grep --color , ls --color )? Tal vez sería mejor definir un alias corto para un comando de coloreado y ejecutar myCommand 2>&1|c cuando quieras colorear myCommand salida de . También podría crear un alias para algunos comandos específicos de colorear siempre.

Tenga en cuenta que el estado de retorno de una canalización es su último comando, por lo que si ejecuta myCommand | c , obtendrá el estado de c , no myCommand . Aquí hay un contenedor bash que evita este problema, que puede usar como w myCommand :

w () {
  "[email protected]" | c
  return $PIPESTATUS[0]
}

Puedes usar programas como:

  • spc (supergato)
  • grc (colorante genérico)
  • resaltar
  • cadena
  • pigmentar
  • grep --color

Puede hacer algo como esto, pero los comandos no verán un tty (algunos se negarán a ejecutarse o se comportarán de manera diferente o harán cosas raras):

exec > >(histring -fEi error)    # Bash

Linux
  1. ¿Cómo asignar la salida de un comando a una variable de shell?

  2. ¿Almacenar la salida del comando en la variable de Shell?

  3. ¿Cómo saber si la salida de un comando o script de Shell es Stdout o Stderr?

  4. ¿Cómo administro la verbosidad del registro dentro de un script de shell?

  5. Obtenga la primera línea de la salida de un comando de shell

Cómo ejecutar comandos de Shell a través del servidor HTTP

Cómo redirigir la salida del comando de shell

Shell Scripting Parte 4:entrada, salida y redirección

Biblioteca de salida de scripts de shell de colores

Redirigir la salida del comando en la ventana acoplable

¿Ocultar la salida de un comando de shell solo en caso de éxito?