supercat
здається, робиш те, що ти шукаєш.
Упаковка: суперката
Description-en: програма, яка забарвлює текст для терміналів та 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
фіксований рядок та -P
PCRE.
Усі матчі будуть виділені. За замовчуванням - червоний або встановіть GREP_COLOR env var.
Ключовим у цій роботі є те, що фінал |$
у шаблоні відповідає кінцевому рядку (тобто всі рядки збігаються), тому всі рядки будуть відображатися (але не кольоровими).
Вони \b
є граничними маркерами слова, щоб вони відповідали, наприклад, FAIL, але не FAILURE. вони не потрібні, тому видаліть їх, якщо ви хочете відповідати частковим словам.
Ось приклад сценарію обгортки для суперката, який я написав вчора. Це працює, але, пишучи це, я виявив, що суперката не має жодного варіанту для нечутливих до регістру пошуків. IMO, що робить програму значно менш корисною. Однак це значно спростило сценарій, оскільки мені не довелося писати варіант '-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"