supercat
semble faire ce que vous cherchez.
Paquet: supercat
Description-fr: programme qui colorise le texte pour les terminaux et HTML
Supercat est un programme qui colorise le texte en fonction de la correspondance régulière
expressions / chaînes / caractères. Supercat prend également en charge la sortie HTML
comme texte ASCII standard. Contrairement à certains programmes de colorisation de texte
existe, Supercat ne vous oblige pas à être un programmeur pour
faire des règles de colorisation.
Page d'accueil: http://supercat.nosredna.net/
Il ne semble pas y avoir de moyen de lui dire quoi coloriser sur la ligne de commande, vous devez spécifier un fichier de configuration.
Je semble me rappeler qu'il existait auparavant un programme appelé `` hilite '' ou `` hl '' qui mettait en évidence du texte correspondant à un modèle (comme grep --colour
, mais affichant également des lignes non correspondantes), mais je ne pouvais pas le trouver lorsque je le cherchais.
Enfin, GNU grep
peut être utilisé pour mettre en évidence les motifs - mais une seule couleur peut être utilisée (c'est-à-dire que vous ne pouvez pas avoir PASS en vert et FAIL en rouge, les deux seraient mis en surbrillance avec la même couleur).
Dirigez vos données via quelque chose comme ceci:
egrep --color "\b(PASS|FAIL)\b|$"
Cet exemple utilise egrep (aka grep -E
), mais -G
les expressions rationnelles de base, -F
les chaînes fixes et -P
PCRE fonctionnent également.
Tous les matchs seront mis en évidence. La valeur par défaut est rouge ou définissez la variable d'environnement GREP_COLOR.
La clé de ce travail est que la finale |$
du motif correspond à la fin de la ligne (c'est-à-dire que toutes les lignes correspondent) de sorte que toutes les lignes seront affichées (mais pas colorisées).
Ce \b
sont des marqueurs de limite de mot pour qu'il corresponde par exemple à FAIL mais pas à FAILURE. ils ne sont pas nécessaires, supprimez-les donc si vous souhaitez faire correspondre des mots partiels.
Voici l'exemple de script wrapper pour supercat que j'ai écrit hier. Cela fonctionne, mais en l'écrivant, j'ai découvert que supercat n'a pas d'option pour les recherches non sensibles à la casse. OMI, ce qui rend le programme beaucoup moins utile. Cependant, cela a grandement simplifié le script car je n'avais pas à écrire une option '-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"