supercat
parece hacer lo que estás buscando.
Paquete: supercat
Description-en: programa que colorea el texto para terminales y HTML
Supercat es un programa que colorea el texto en función de la coincidencia regular
expresiones / cadenas / caracteres. Supercat también admite la salida html
como texto ASCII estándar. A diferencia de algunos programas para colorear texto que
existe, Supercat no requiere que tengas que ser un programador para
Hacer reglas de coloración.
Página de inicio: http://supercat.nosredna.net/
No parece haber ninguna forma de decirle qué colorear en la línea de comando, debe especificar un archivo de configuración.
Creo recordar que solía haber un programa llamado 'hilite' o 'hl' que resaltaba el texto que coincidía con un patrón (como grep --colour
, pero que también mostraba líneas que no coincidían), pero no pude encontrarlo cuando lo busqué.
Finalmente, GNU grep
se puede usar para resaltar patrones, pero solo se puede usar un color (es decir, no se puede PASAR en verde y FALLO en rojo, ambos se resaltarán con el mismo color).
Canalice sus datos a través de algo como esto:
egrep --color "\b(PASS|FAIL)\b|$"
Este ejemplo usa egrep (aka grep -E
), pero también funciona la expresión regular -G
básica, -F
la cadena fija y -P
PCRE.
Todos los partidos serán resaltados. El valor predeterminado es rojo, o establece el GREP_COLOR env var.
La clave de este trabajo es que la final |$
en el patrón coincide con el final de la línea (es decir, todas las líneas coinciden), por lo que todas las líneas se mostrarán (pero no se colorearán).
El \b
son marcadores de límite de palabra para que coincida con por ejemplo FALLO FALLO pero no. no son necesarios, así que elimínelos si desea unir palabras parciales.
Aquí está el script de ejemplo de envoltura para supercat que escribí ayer. Funciona, pero al escribirlo, descubrí que Supercat no tiene ninguna opción para las búsquedas que no distinguen entre mayúsculas y minúsculas. OMI, eso hace que el programa sea significativamente menos útil. Sin embargo, simplificó enormemente el script porque no tuve que escribir una opción '-i' :)
#! /bin/bash
# Requires: tempfile from debian-utils, getopt from util-linux, and supercat
SCRIPTNAME=$(basename $0)
CFGFILE=$(tempfile -p spc)
usage() {
cat <<__EOF__
Highlight regexp patterns found on stdin or files specified on command
line with specified colours.
Usage: $SCRIPTNAME [ --colour "pattern" ...] [FILE]
Options:
-k,--black regexp
-r,--red regexp
-g,--green regexp
-y,--yellow regexp
-b,--blue regexp
-m,--magenta regexp
-c,--cyan regexp
-w,--white regexp
Example:
run-script.sh | $SCRIPTNAME --green PASS --red FAIL
__EOF__
exit 0
}
# Format definition from the spc man page:
#1234567890123456789012345678901234567890123456789012345
#HTML Color Name Col A N T RE / String / Characters
FMT="%-20s %3s %1s %1s %1s (%s)\n"
add_color_to_config() {
COLOR="$1"
PATTERN="$2"
printf "$FMT" "$COLOR" "$COLOR" - 0 r "$PATTERN" >> "$CFGFILE"
}
# uses the "getopt" program from util-linux, which supports long
# options. The "getopts" built-in to bash does not.
TEMP=$(getopt \
-o 'hk:r:g:y:b:m:c:w:' \
-l 'help,black:,red:,green:,yellow:,blue:,magenta:,cyan:,white:' \
-n "$0" -- "$@")
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
eval set -- "$TEMP"
while true ; do
case "$1" in
-k|--bla*) add_color_to_config blk "$2" ; shift 2 ;;
-r|--red) add_color_to_config red "$2" ; shift 2 ;;
-g|--gre*) add_color_to_config grn "$2" ; shift 2 ;;
-y|--yel*) add_color_to_config yel "$2" ; shift 2 ;;
-b|--blu*) add_color_to_config blu "$2" ; shift 2 ;;
-m|--mag*) add_color_to_config mag "$2" ; shift 2 ;;
-c|--cya*) add_color_to_config cya "$2" ; shift 2 ;;
-w|--whi*) add_color_to_config whi "$2" ; shift 2 ;;
-h|--hel*) usage ; exit 0 ;;
--) shift ; break ;;
*) echo 'Unknown option!' ; exit 1 ;;
esac
done
spc -R -c "$CFGFILE" "$@"
rm -f "$CFGFILE"