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