supercat
parece fazer o que você está procurando.
Pacote: supercat
Description-pt: programa que coloriza o texto para terminais e HTML
O Supercat é um programa que coloriza o texto com base na correspondência regular
expressões / strings / caracteres. Supercat também suporta saída html
como texto ASCII padrão. Ao contrário de alguns programas de coloração de texto que
existir, o Supercat não exige que você seja um programador para
faça regras de coloração.
Página inicial: http://supercat.nosredna.net/
Não parece haver nenhuma maneira de dizer o que colorir na linha de comando, você precisa especificar um arquivo de configuração.
Lembro-me de que costumava haver um programa chamado 'hilite' ou 'hl' que realçava o texto que correspondia a um padrão (como grep --colour
, mas também exibe linhas não correspondentes), mas não o encontrei quando o procurei.
Finalmente, o GNU grep
pode ser usado para destacar padrões - mas apenas 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 através de algo como isto:
egrep --color "\b(PASS|FAIL)\b|$"
Este exemplo usa egrep (aka grep -E
), mas -G
regexp básico, -F
string fixa e -P
PCRE também funcionam.
Todas as partidas serão destacadas. O padrão é vermelho ou configure a var. Env GREP_COLOR.
A chave para este trabalho é que a final |$
no padrão corresponde ao final da linha (ou seja, todas as linhas correspondem), para que todas as linhas sejam exibidas (mas não coloridas).
O \b
são marcadores de limite de palavras para que ele corresponda por exemplo falhar, mas não FALHA. eles não são necessários; portanto, remova-os se desejar corresponder a palavras parciais.
Aqui está o exemplo de script wrapper para supercat que escrevi ontem. 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, isso 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"