supercat
scheint zu tun, wonach Sie suchen.
Paket: Superkatze
Description-de: Programm, das Text für Terminals und HTML einfärbt
Supercat ist ein Programm, das Text basierend auf übereinstimmenden regulären Farben einfärbt
Ausdrücke / Zeichenfolgen / Zeichen. Supercat unterstützt auch die HTML-Ausgabe
als Standard-ASCII-Text. Im Gegensatz zu einigen Text-Colorizing-Programmen, die
existieren, erfordert Supercat nicht, dass Sie ein Programmierer sein müssen, um
Kolorierungsregeln erstellen.
Homepage: http://supercat.nosredna.net/
Es scheint keine Möglichkeit zu geben, anzugeben, was in der Befehlszeile eingefärbt werden soll. Sie müssen eine Konfigurationsdatei angeben.
Ich erinnere mich an ein Programm namens "hilite" oder "hl", das Text hervorhob, der einem Muster entsprach (wie grep --colour
, aber auch nicht übereinstimmende Linien anzeigte), aber ich konnte ihn nicht finden, als ich danach suchte.
Schließlich kann GNU grep
verwendet werden, um Muster hervorzuheben - es kann jedoch nur eine Farbe verwendet werden (dh Sie können PASS nicht in Grün und FAIL in Rot haben, beide werden mit derselben Farbe hervorgehoben).
Führen Sie Ihre Daten wie folgt durch:
egrep --color "\b(PASS|FAIL)\b|$"
In diesem Beispiel wird egrep (aka grep -E
) verwendet, aber auch -G
regulärer regulärer Ausdruck, -F
fester String und -P
PCRE funktionieren.
Alle Übereinstimmungen werden hervorgehoben. Die Standardeinstellung ist rot, oder legen Sie die env-Variable GREP_COLOR fest.
Der Schlüssel zu dieser Arbeit ist, dass das Finale |$
im Muster mit dem Zeilenende übereinstimmt (dh alle Zeilen stimmen überein), sodass alle Zeilen angezeigt (aber nicht eingefärbt) werden.
Das \b
sind Worte , Grenzmarkierungen , so dass sie paßt zB FAIL aber nicht AUSFALL. Sie sind nicht erforderlich. Entfernen Sie sie daher, wenn Sie Teilwörter abgleichen möchten.
Hier ist das Beispiel-Wrapper-Skript für Supercat, das ich gestern geschrieben habe. Es funktioniert, aber beim Schreiben habe ich festgestellt, dass Supercat keine Option für Suchvorgänge ohne Berücksichtigung der Groß- und Kleinschreibung hat. IMO, das macht das Programm deutlich weniger nützlich. Es hat das Skript jedoch stark vereinfacht, da ich keine '-i'-Option schreiben musste :)
#! /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"