supercat
tampaknya melakukan apa yang Anda cari.
Paket: supercat
Deskripsi-id: program yang mewarnai teks untuk terminal dan HTML
Supercat adalah program yang mewarnai teks berdasarkan pencocokan biasa
ekspresi / string / karakter. Supercat mendukung output html juga
sebagai teks ASCII standar. Berbeda dengan beberapa program pewarnaan teks itu
ada, Supercat tidak mengharuskan Anda harus menjadi seorang programmer
membuat aturan pewarnaan.
Situs web: http://supercat.nosredna.net/
Tampaknya tidak ada cara untuk mengatakan apa yang harus diwarnai pada baris perintah, Anda harus menentukan file konfigurasi.
Sepertinya saya ingat dulu ada program yang disebut 'hilite' atau 'hl' yang menyorot teks yang cocok dengan pola (seperti grep --colour
, tetapi juga menampilkan garis yang tidak cocok), tetapi saya tidak dapat menemukannya ketika saya mencarinya.
Akhirnya, GNU grep
dapat digunakan untuk menyoroti pola - tetapi hanya satu warna yang dapat digunakan (yaitu Anda tidak dapat memiliki PASS berwarna hijau dan GAGAL merah, keduanya akan disorot dengan warna yang sama).
Pipa data Anda melalui sesuatu seperti ini:
egrep --color "\b(PASS|FAIL)\b|$"
Contoh ini menggunakan egrep (alias grep -E
), tetapi -G
regexp dasar, -F
string-tetap, dan -P
PCRE juga berfungsi.
Semua pertandingan akan disorot. Defaultnya merah, atau atur GREP_COLOR env var.
Kunci dari kerja ini adalah bahwa final |$
dalam pola cocok dengan end-of-line (yaitu semua garis cocok) sehingga semua garis akan ditampilkan (tetapi tidak diwarnai).
The \b
adalah kata-batas penanda sehingga cocok misalnya FAIL tapi tidak KEGAGALAN. mereka tidak perlu, jadi hapuslah jika Anda ingin mencocokkan kata-kata parsial.
Inilah contoh skrip wrapper untuk supercat yang saya tulis kemarin. Ini berfungsi, tetapi dalam menulisnya, saya menemukan bahwa supercat tidak memiliki opsi untuk pencarian case-sensitive. IMO, yang membuat program secara signifikan kurang bermanfaat. Itu, bagaimanapun, sangat menyederhanakan skrip karena saya tidak perlu menulis opsi '-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"