supercat
dường như làm những gì bạn đang tìm kiếm.
Gói: siêu xe
Mô tả-en: chương trình tô màu văn bản cho thiết bị đầu cuối và HTML
Supercat là một chương trình tô màu văn bản dựa trên kết hợp thông thường
biểu thức / chuỗi / ký tự. Supercat cũng hỗ trợ đầu ra html
như văn bản ASCII tiêu chuẩn. Không giống như một số chương trình tô màu văn bản
tồn tại, Supercat không yêu cầu bạn phải là một lập trình viên để
làm quy tắc tô màu.
Trang chủ: http://supercat.nosredna.net/
Dường như không có cách nào để nói với nó những gì cần tô màu trên dòng lệnh, bạn phải chỉ định một tệp cấu hình.
Tôi dường như nhớ lại đã từng có một chương trình gọi là 'hilite' hoặc 'hl' làm nổi bật văn bản khớp với một mẫu (như grep --colour
, nhưng cũng hiển thị các dòng không khớp), nhưng tôi không thể tìm thấy nó khi tôi tìm kiếm nó.
Cuối cùng, GNU grep
có thể được sử dụng để làm nổi bật các mẫu - nhưng chỉ có thể sử dụng một màu (nghĩa là bạn không thể có PASS màu xanh lá cây và FAIL màu đỏ, cả hai sẽ được tô sáng cùng màu).
Truyền dữ liệu của bạn thông qua một cái gì đó như thế này:
egrep --color "\b(PASS|FAIL)\b|$"
Ví dụ này sử dụng egrep (aka grep -E
), nhưng -G
regrec cơ bản, -F
chuỗi cố định và -P
PCRE cũng hoạt động.
Tất cả các trận đấu sẽ được làm nổi bật. Mặc định là màu đỏ hoặc đặt varP_COLOR env var.
Chìa khóa cho công việc này là phần cuối cùng |$
trong mẫu khớp với dòng cuối (tức là tất cả các dòng khớp) để tất cả các dòng sẽ được hiển thị (nhưng không được tô màu).
Các \b
đánh dấu ranh giới từ sao cho khớp với nó, ví dụ FAIL nhưng không FAILURE. chúng không cần thiết, vì vậy hãy loại bỏ chúng nếu bạn muốn ghép các từ một phần.
Đây là kịch bản trình bao bọc ví dụ cho supercat mà tôi đã viết ngày hôm qua. Nó hoạt động, nhưng bằng văn bản, tôi phát hiện ra rằng supercat không có bất kỳ tùy chọn nào cho các tìm kiếm không phân biệt chữ hoa chữ thường. IMO, điều đó làm cho chương trình ít hữu ích hơn đáng kể. Tuy nhiên, nó đã đơn giản hóa rất nhiều kịch bản vì tôi không phải viết tùy chọn '-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"