supercat
wydaje się robić to, czego szukasz.
Opakowanie: supercat
Description-pl: program, który koloryzuje tekst dla terminali i HTML
Supercat to program, który koloryzuje tekst na podstawie regularnego dopasowywania
wyrażenia / ciągi / znaki. Supercat obsługuje również wyjście HTML
jako standardowy tekst ASCII. W przeciwieństwie do niektórych programów do kolorowania tekstu, które
istnieje, Supercat nie wymaga bycia programistą
ustal zasady kolorowania.
Strona główna: http://supercat.nosredna.net/
Wydaje się, że nie ma sposobu, aby powiedzieć mu, co ma być kolorowane w wierszu poleceń, musisz określić plik konfiguracyjny.
Wydaje mi się, że pamiętam, że kiedyś istniał program o nazwie „hilite” lub „hl”, który wyróżniał tekst pasujący do wzorca (na przykład grep --colour
, ale wyświetlał również niepasujące linie), ale nie mogłem go znaleźć, gdy go szukałem.
Wreszcie, GNU grep
może być użyte do podświetlenia wzorów - ale można użyć tylko jednego koloru (tzn. Nie możesz mieć PASS w kolorze zielonym i FAIL w kolorze czerwonym, oba byłyby podświetlone tym samym kolorem).
Przeprowadź dane przez coś takiego:
egrep --color "\b(PASS|FAIL)\b|$"
W tym przykładzie użyto egrep (aka grep -E
), ale działają również -G
podstawowe wyrażenia regularne, -F
fixed-string i -P
PCRE.
Wszystkie mecze zostaną podświetlone. Domyślnie jest czerwony lub ustaw zmienną GREP_COLOR env var.
Kluczem do tego jest to, że finał |$
we wzorze pasuje do końca linii (tzn. Wszystkie linie pasują), więc wszystkie linie będą wyświetlane (ale nie pokolorowane).
Są \b
to znaczniki granicy słowa, dzięki czemu pasują np. FAIL, ale nie FAILURE. nie są konieczne, więc usuń je, jeśli chcesz dopasować częściowe słowa.
Oto przykładowy skrypt otoki dla superkata, który napisałem wczoraj. Działa, ale pisząc to odkryłem, że supercat nie ma żadnej opcji wyszukiwania bez rozróżniania wielkości liter. IMO, dzięki czemu program jest znacznie mniej przydatny. To jednak znacznie uprościło skrypt, ponieważ nie musiałem pisać opcji „-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"