supercat
parece fazer o que você está procurando.
Package: supercat
Description-en: program that colorizes text for terminals and HTML
Supercat is a program that colorizes text based on matching regular
expressions/strings/characters. Supercat supports html output as well
as standard ASCII text. Unlike some text-colorizing programs that
exist, Supercat does not require you to have to be a programmer to
make colorization rules.
Homepage: http://supercat.nosredna.net/
Não parece haver nenhuma maneira de dizer o que colorir na linha de comando, você tem que especificar um arquivo de configuração.
Parece que lembro que costumava haver um programa chamado 'hilite' ou 'hl' que destacava o texto que correspondia a um padrão (como grep --colour
, mas exibindo linhas não correspondentes também), mas não consegui encontrá-lo quando eu procurei por ele.
Finalmente, GNU grep
pode ser usado para destacar padrões - mas somente uma cor pode ser usada (ou seja, você não pode ter PASS em verde e FAIL em vermelho, ambos seriam destacados com a mesma cor).
Canalize seus dados por meio de algo assim:
egrep --color "\b(PASS|FAIL)\b|$"
Este exemplo usa egrep (também conhecido como grep -E
), mas -G
basic regexp, -F
fixed-string e -P
PCRE também funcionam.
Todos os jogos serão destacados. O padrão é vermelho ou defina o GREP_COLOR env var.
A chave para esse trabalho é que o% final% co_de no padrão corresponde ao fim de linha (ou seja, todas as linhas correspondem), portanto todas as linhas serão exibidas (mas não coloridas).
Os |$
são marcadores de limite de palavras para corresponder a, por exemplo. FALHA, mas não FALHA. eles não são necessários, então remova-os se quiser combinar palavras parciais.
Aqui está o script wrapper de exemplo para o supercat que eu escrevi ontem. Ele funciona, mas, ao escrevê-lo, descobri que o supercat não tem nenhuma opção para pesquisas que não diferenciam maiúsculas de minúsculas. IMO, que torna o programa significativamente menos útil. No entanto, simplificou bastante o script porque não precisei escrever uma opção '-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"