2013-02-04 33 views
16

Tôi đã cố gắng làm cho đuôi dễ đọc hơn một chút đối với các phần khởi động của máy chủ. lệnh hiện tại của tôi lọc ra hầu hết các thông điệp INFO và DEBUG từ khởi động:Colorize tail output

tail -F ../server/durango/log/server.log | grep -e "ERROR" -e "WARN" -e "Shutdown" -e "MicroKernel" | grep --color=auto -E 'MicroKernel|$' 

Những gì tôi muốn làm là nghề cái gì đó sẽ làm nổi bật WARN màu vàng và LỖI màu đỏ, và microkernel màu xanh lục. Tôi đã thử chỉ đường ống grep --color = auto nhiều lần, nhưng màu duy nhất tồn tại là lệnh cuối cùng trong đường ống.

Có một lớp lót để thực hiện việc này không? Hoặc thậm chí là một lớp lót nhiều?

Trả lời

22

có, có cách nào để làm điều này. Tức là, miễn là thiết bị đầu cuối của bạn hỗ trợ ANSI escape sequences. Đây là hầu hết các thiết bị đầu cuối tồn tại.

Tôi nghĩ rằng tôi không cần giải thích làm thế nào để grep, sed vv điểm là màu sắc phải không?

xem dưới đây, điều này sẽ làm cho

WARN yellow 
ERROR red 
foo green 

đây là ví dụ:

kent$ echo "WARN 
ERROR 
foo"|sed 's#WARN#\x1b[33m&#; s#ERROR#\x1b[31m&#; s#foo#\x1b[32m&#' 

Note: \x1b là hệ thập lục phân cho nhân vật ESC (^VEsc) .

để xem kết quả:

enter image description here

+4

Add "^ [[0m" ngay sau dấu và (&) trong 'lệnh sed' nếu bạn chỉ muốn để tô màu cho từ khóa phù hợp, không phải toàn bộ dòng. – chepner

+0

@chepner u r right. Nhận xét tốt. – Kent

+3

Tôi đã chỉnh sửa trực tuyến thành một thứ dễ dàng hơn để sao chép/dán. – sehe

6

tôi đã viết a script cho điều này năm trước. Bạn có thể dễ dàng bao gồm các trường hợp của nhiều màu sắc bằng cách đường dẫn các invocations liên tiếp của highlight với nhau.

Từ README:

Usage: ./highlight [-i] [--color=COLOR_STRING] [--] <PATTERN0> [PATTERN1...] 

This is highlight version 1.0. 

This program takes text via standard input and outputs it with the given 
perlre(1) pattern(s) highlighted with the given color. If no color option 
is specified, it defaults to 'bold red'. Colors may be anything 
that Perl's Term::ANSIColor understands. This program is similar to 
"grep --color PATTERN" except both matching and non-matching lines are 
printed. 

The default color can be selected via the $HIGHLIGHT_COLOR environment 
variable. The command-line option takes precedence. 

Passing -i or --ignore-case will enable case-insensitive matching. 

If your pattern begins with a dash ('-'), you can pass a '--' argument 
after any options and before your pattern to distinguish it from an 
option.