supercat
кажется, делает то, что вы ищете.
Пакет: суперкат
Description-ru: программа, которая раскрашивает текст для терминалов и HTML
Supercat - это программа, которая раскрашивает текст на основе соответствия обычному
выражения / строки / символы. Supercat также поддерживает вывод html
как стандартный текст ASCII. В отличие от некоторых программ для раскрашивания текста, которые
существует, Supercat не требует, чтобы вы были программистом
сделать правила окраски.
Домашняя страница: http://supercat.nosredna.net/
Кажется, нет никакого способа сказать ему, что окрашивать в командной строке, вы должны указать файл конфигурации.
Кажется, я вспоминал, что раньше была программа под названием «hilite» или «hl», которая выделяла текст, который соответствовал шаблону (например grep --colour
, но отображал также несоответствующие строки), но я не мог найти его, когда искал его.
Наконец, GNU grep
можно использовать для выделения шаблонов, но можно использовать только один цвет (т. Е. У вас не может быть PASS в зеленом и FAIL в красном, оба будут выделены одним и тем же цветом).
Передайте данные через что-то вроде этого:
egrep --color "\b(PASS|FAIL)\b|$"
В этом примере используется egrep (aka grep -E
), но также работают -G
базовые регулярные выражения, -F
fixed-string и -P
PCRE.
Все совпадения будут выделены. По умолчанию красный или установите GREP_COLOR env var.
Ключом к этой работе является то, что финал |$
в шаблоне соответствует концу строки (т.е. все строки совпадают), поэтому все строки будут отображаться (но не раскрашиваться).
Это \b
маркеры границы слова, так что они соответствуют, например, FAIL, но не FAILURE. они не нужны, поэтому удалите их, если вы хотите сопоставить отдельные слова.
Вот пример скрипта-обёртки для supercat, который я написал вчера. Это работает, но при написании этого я обнаружил, что у supercat нет возможности поиска без учета регистра. ИМО, что делает программу значительно менее полезной. Однако это значительно упростило сценарий, поскольку мне не нужно было писать опцию '-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"