supercat
sembra fare quello che stai cercando.
Confezione: supercat
Descrizione-it: programma che colora il testo per terminali e HTML
Supercat è un programma che colora il testo in base alla corrispondenza regolare
Espressioni / stringhe / caratteri. Supercat supporta anche l'output html
come testo ASCII standard. A differenza di alcuni programmi di colorazione del testo che
esiste, Supercat non richiede di essere un programmatore di
stabilire regole di colorizzazione.
Pagina iniziale: http://supercat.nosredna.net/
Non sembra esserci alcun modo per dirgli cosa colorare sulla riga di comando, devi specificare un file di configurazione.
Mi sembra di ricordare che esisteva un programma chiamato "hilite" o "hl" che evidenziava il testo che corrispondeva a un modello (come grep --colour
, ma mostrava anche linee non corrispondenti), ma non riuscivo a trovarlo quando lo cercavo.
Infine, GNU grep
può essere usato per evidenziare i motivi, ma può essere usato solo un colore (cioè non puoi avere PASS in verde e FAIL in rosso, entrambi verrebbero evidenziati con lo stesso colore).
Inoltra i tuoi dati attraverso qualcosa del genere:
egrep --color "\b(PASS|FAIL)\b|$"
Questo esempio usa egrep (aka grep -E
), ma -G
funzionano anche regexp di base, -F
stringhe fisse e -P
PCRE.
Tutte le partite verranno evidenziate. L'impostazione predefinita è rossa o imposta GREP_COLOR env var.
La chiave di questo lavoro è che il finale |$
nel modello corrisponde alla fine della linea (cioè tutte le linee corrispondono) in modo che tutte le linee vengano visualizzate (ma non colorate).
Il \b
sono i marcatori di parola-di confine in modo che corrisponda ad esempio, FAIL, ma non il fallimento. non sono necessari, quindi rimuovili se vuoi abbinare le parole parziali.
Ecco lo script wrapper di esempio per supercat che ho scritto ieri. Funziona, ma scrivendolo, ho scoperto che Supercat non ha alcuna opzione per le ricerche senza distinzione tra maiuscole e minuscole. IMO, che rende il programma significativamente meno utile. Tuttavia, ha semplificato notevolmente lo script perché non dovevo scrivere un'opzione '-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"