Làm thế nào để có đuôi -f hiển thị màu đầu ra


265

Tôi muốn có thể điều chỉnh đầu ra của tệp nhật ký máy chủ có các thông báo như:

INFO
SEVERE

vv, và nếu nó SEVERE, hiển thị dòng màu đỏ; nếu nó INFO, màu xanh lá cây. Loại bí danh nào tôi có thể thiết lập cho một taillệnh sẽ giúp tôi làm điều này?


Câu trả lời:


234

Thử multitail . Đây là một übergeneralization của tail -f. Bạn có thể xem nhiều tệp trong các cửa sổ riêng biệt, tô sáng các dòng dựa trên nội dung của chúng và hơn thế nữa.

multitail -c /path/to/log

Các màu sắc có thể cấu hình. Nếu bảng màu mặc định không phù hợp với bạn, hãy viết riêng của bạn trong tệp cấu hình. Ví dụ: gọi multitail -cS amir_log /path/to/logvới những điều sau đây ~/.multitailrc:

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE

Một giải pháp khác, nếu bạn đang ở trên máy chủ, nơi không thuận tiện để cài đặt các công cụ không chuẩn , là kết hợp tail -fvới sed hoặc awk để thêm các chuỗi điều khiển lựa chọn màu. Điều này đòi hỏi tail -fphải tuôn ra đầu ra tiêu chuẩn của nó mà không bị trì hoãn ngay cả khi đầu ra tiêu chuẩn của nó là một đường ống, tôi không biết liệu tất cả các triển khai có làm điều này không.

tail -f /path/to/log | awk '
  /INFO/ {print "\033[32m" $0 "\033[39m"}
  /SEVERE/ {print "\033[31m" $0 "\033[39m"}
'

hoặc với sed

tail -f /path/to/log | sed --unbuffered \
    -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
    -e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'

Nếu sed của bạn không phải là GNU sed, hãy thay thế \o033bằng ký tự thoát theo nghĩa đen và xóa --unbuffered.

Tuy nhiên, một khả năng khác là chạy tail -ftrong bộ đệm shell Emacs và sử dụng khả năng tô màu cú pháp của Emacs.


Làm thế nào bạn có thể làm điều này với sed? (xin lỗi vì lười biếng và không tự mình tìm ra điều đó!) Nhưng bạn có thể vui lòng thêm một sedví dụ không.
Ali

5
@Ali Sed ít thuận tiện hơn vì nó không có cú pháp cho ký tự thoát, bạn cần phải có nó theo nghĩa đen trong tập lệnh hoặc sử dụng phương thức trích dẫn shell để làm việc với nó. Tôi khuyên bạn nên sử dụng awk.
Gilles

8
@Gilles Trong bạn tail -fvới awkmã, nếu một chuỗi không có INFONGHIÊM TRỌNG , chuỗi không được in. Làm thế nào tôi có thể in các chuỗi còn lại ? (Chuỗi không cần phải được tô màu)
Benjamin

6
@Benjamin Thêm ; nexttrước dấu ngoặc nhọn để bỏ qua quá trình xử lý tiếp theo và một dòng xử lý mới 1 {print}ở cuối ( 1có nghĩa là luôn luôn).
Gilles

3
sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
DmitrySandalov

120

grc , colourizer chung là khá mát mẻ.

apt-get install grc

Cứ làm đi

grc tail -f /var/log/apache2/error.log

và tận hưởng!

Bạn cũng sẽ tìm thấy nó trên GitHub .


2
Đây chính xác là những gì tôi cần: nhẹ và đơn giản. Màu sắc không chính xác phù hợp với loại nhật ký của tôi (nhật ký tùy chỉnh) nhưng bất kỳ màu nào cũng giúp tôi dễ dàng theo dõi nhật ký hơn.
rennat

Đối với tôi 'grc' về lỗi Debian với: OSError: [Errno 13] Quyền bị từ chối. Ngoài ra, nó phụ thuộc vào Python được cài đặt để nó không bị giảm nhẹ trừ khi bạn đã có nó. Tôi đã tìm thấy 'ccze' để hoạt động tốt hơn nhiều, ví dụ. 'đuôi -f -n 50 /var/log/starbound-server.log | ccze -A '.
Daniel Sokolowski

1
Cài đặt mặc định grc trong Ubuntu không hiển thị tốt cho syslog hoặc mail.log. Không dễ để hiểu cách tùy chỉnh nó.
Lepe

1
Tôi thấy nó nhanh hơn và dễ dàng hơn để tô màu hơn so với đa nhiệm. Chỉ cần cài đặt nhanh qua nguồn trên hệ thống CentOS của tôi và nâng cấp cuộc sống của tôi. Sẽ cài đặt trên các hệ thống khác của tôi quá.
zeeshan

4
Điều này có vẻ khá khủng khiếp trên nhật ký nginx i.imgur.com/aJbIOfL.png
mpen

51

Bạn đã có một cái nhìn tại ccze ? Bạn có thể tùy chỉnh màu mặc định của một số từ khóa bằng cách sử dụng tùy chọn -choặc trực tiếp trong tệp cấu hình của bạn. Nếu màn hình của bạn bị xóa sau khi tô màu, bạn phải sử dụng tùy chọn -A.

Biên tập:

Nếu bạn thực sự muốn có dòng hoàn chỉnh được tô màu đỏ, bạn cũng có thể thử tại đây:

$ tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'

\e[1;31msẽ cho bạn màu đỏ. Nếu bạn muốn một số màu vàng, sử dụng \e[1;33mvà cho màu xanh lá cây \e[1;32m. Việc \e[0mkhôi phục màu văn bản bình thường.


1
Điều này không hoạt động trên Mac - Tôi nâng cấp nó vì nó hoạt động trên Linux.
Amir Afghani

Nâng cao bởi vì trong khi thủ thuật perl / ansi có thể không, ccze thì không.
Shadur

1
Bạn cũng có thể làm cho thiết bị đầu cuối của mình gửi cảnh báo hoặc "tiếng bíp" bằng cách thêm \007vào cuối regex, như vậy : perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Điều này hoạt động tuyệt vời nếu bạn đang sử dụng tmux với set -g bell-action any, trong trường hợp đó nếu bạn có đuôi đăng nhập trong một cửa sổ khác, tên cửa sổ đó sẽ cảnh báo mỗi khi regex tìm thấy kết quả khớp.
jonyamo

@AmirAfghani Đây là trang web linux / unix SE, do đó tôi không chắc tại sao bạn nghĩ nó sẽ hoạt động trên mac.
BЈовић

1
@ BЈовић Mac là một Unix.
Chris Xuống

34

Hãy xem lnav , trình xem tệp nhật ký nâng cao.

lnav lnav

Nó cũng có thể in các định dạng khác nhau.

Trước:

lnav-trước-xinh

Sau:

lnav-xinh


Thực sự bổ sung tuyệt vời cho bộ công cụ phân tích đăng nhập. Cám ơn vì sự gợi ý.
Patrik Alienus

24

Bạn có thể sử dụng cầu vồng , tô màu các đường dựa trên các biểu thức thông thường:

rainbow --red='SEVERE.*' --green='INFO.*' tail -f my-file.log

Nó cũng đi kèm với các cấu hình được xác định trước , ví dụ cho nhật ký Tomcat:

rainbow --config=tomcat tail -f my-file.log

(từ chối trách nhiệm: Tôi là tác giả)


2
Tôi đã thử hầu hết các giải pháp khác được đưa ra cho câu hỏi này, nhưng cầu vồng là giải pháp duy nhất hoạt động tốt như nhau trên mặt trời, aix, linux, termux, darwin và cygwin - 6 môi trường tôi sử dụng hàng ngày. Tất cả những thứ khác liên quan đến các quá trình xây dựng không di động khó khăn cho ít nhất một số nền tảng.
Stablesog

1
rainbownó thật tuyệt. Bạn có phải là tác giả? Nếu vậy, xin vui lòng chỉnh sửa câu trả lời của bạn với sự ghi nhận đó.
giám mục

vâng, xin lỗi, đã chỉnh sửa
nicoulaj

15

Bạn có thể sử dụng colortail :

colortail -f /var/log/messages

2
+1 có sẵn tại kho Ubuntu. Điều tôi thích của colortail so với ccze là bạn có thể tùy chỉnh các mẫu của mình một cách tự do bằng RegEx. Các màu có sẵn: đen, sáng, trắng, sáng, đỏ tươi, sáng, lục lam, sáng, xanh lục, sáng xanh, vàng, sáng, đỏ, sáng, xanh, sáng. Thật không may, không có cách nào để đặt đậm hoặc các màu khác như màu cam.
Lepe

Tôi muốn sửa một điểm về nhận xét trước đây của tôi: màu "sáng" bao gồm "đậm" (một số màu thực sự cũng sẽ trông sáng hơn)
lepe

Tôi đã thử điều này trên Ubuntu 18 và nó không hoạt động. Các thiết lập là nhiều bước và hướng dẫn không rõ ràng. Vẫn không chắc đó là phần tôi đã sai; phần cuối có thể rõ ràng hơn "Sau đó, bạn có thể muốn sao chép và chỉnh sửa các tệp cấu hình ví dụ sang một nơi khác. Tôi có chúng trong ~ / .colortail /"
Dawoodjee

Chỉ cần cài đặt colortail với, apt install colortailvà nó sẽ hoạt động mà không cần chỉnh sửa ~ / .colortail / quá.
Kartik M

11

Cũng lưu ý rằng nếu bạn chỉ muốn tìm kiếm một regex phù hợp, GNU grep with --colorsẽ hoạt động - chỉ cần đưa tailđầu ra của bạn đi qua đó.


OP chỉ muốn làm nổi bật đầu ra, không lọc nó. Grep sẽ không hiển thị các dòng không khớp ...
Bộ giải mã

3
Nếu bạn nói grep  -A9999  -B9999 regex, nó sẽ hiển thị tất cả các dòng trừ khi bạn có 10.000 dòng không khớp trong một hàng. Sử dụng một cái gì đó như GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVEREđể hiển thị từ SEVEREmàu đỏ, phần còn lại của dòng SEVERE màu vàng và tất cả các dòng khác (không phải SEVERE) (tối đa 9999) có màu xanh lá cây.
G-Man

Bạn có thể cần phải chuyển --color=alwayssang grep thay vì chỉ --color, tùy thuộc vào thứ tự của đường ống của bạn, nhưng vâng, cái đuôi này hoạt động (GNU coreutils) 8.27 được cài đặt trên hộp của tôi.
Hank Schultz

7

Để có được đầu ra màu từ các lệnh tiêu chuẩn như grep, bạn nên đặt cái này aliastrong.bashrc

# User specific aliases and functions
alias grep='grep --color=auto'

Khi bạn grep một cái gì đó trong tệp của bạn, bạn sẽ thấy một cái gì đó như thế này, (nhưng có lẽ là màu đỏ):

[root @ linuxbox mydir] # grep "\ (INFO \ | SEVERE \)" / var / log / logname
Mục này là một THÔNG TIN  
TUYỆT VỜI Mục này là một cảnh báo!
mục này là một INFO 
mục này là một INFO 
SEVERE mục này là một cảnh báo!

nếu muốn sử dụng tailhoặc awkmuốn màu sắc tồn tại trong một đường ống, thì bí danh là không đủ và bạn nên sử dụng --color=alwaystham số, ví dụ:

[root @ linubox mydir] # grep --color = always "\ (INFO \ | SEVERE \)" / var / log / logname | đuôi -f | awk '{in $ 1}'
điều này 
MÙA
điều này
điều này
MÙA

Nếu bạn muốn văn bản màu với awkcâu chuyện hơi phức tạp nhưng mạnh mẽ hơn, ví dụ:

[root @ linubox mydir] # tail -f / var / log / message | awk '{if ($ 5 ~ / INFO /) in "\ 033 [1; 32m" $ 0 "\ 033 [0m"; khác nếu ($ 1 ~ / SEVERE /) in "\ 033 [1; 31m" $ 0 "\ 033 [0m"; khác in $ 0} '
Mục này là một THÔNG TIN  
TUYỆT VỜI Mục này là một cảnh báo!
đây là một ENTRY khác
mục này là một thông tin
đây là một ENTRY khác
Mục này là một THÔNG TIN 
TUYỆT VỜI Mục này là một cảnh báo!

với mỗi dòng trong màu sắc riêng của nó.

Có nhiều cách khác để lấy văn bản được tô màu từ shell bằng các công cụ khác và chúng được mô tả tốt bởi các thành viên khác.


7

Tôi khá thích colorex . Đơn giản, nhưng thỏa mãn.

tail -f /var/log/syslog | colorex -G '[0-9]{2}:[0-9]{2}:[0-9]{2}' -b $(hostname)

12
thế nào là đơn giản
Eliran Malka

6

Dựa trên câu trả lời @uloBasEI, tôi đã thử sử dụng ... | perl ... | perl ..., nhưng đường ống Linux hơi điên và quá chậm. Nếu tôi đặt tất cả các quy tắc chỉ trong một perllệnh, nó hoạt động tốt.

Ví dụ: tạo perltệp colorTail.pl như dưới đây:

#!/usr/bin/perl -w

while(<STDIN>) {
    my $line = $_;
    chomp($line);
    for($line){
        s/==>.*<==/\e[1;44m$&\e[0m/gi; #tail multiples files name in blue background
        s/.*exception.*|at .*/\e[0;31m$&\e[0m/gi;  #java errors & stacktraces in red
        s/info.*/\e[1;32m$&\e[0m/gi; #info replacement in green
        s/warning.*/\e[1;33m$&\e[0m/gi; #warning replacement in yellow
    }
    print $line, "\n";
}

Sử dụng nó như:

tail -f *.log | perl colorTail.pl
tail -f *.log -f **/*.log | perl colorTail.pl

LƯU Ý: bạn cũng có thể sử dụng nó trên MobaXTerm ! Chỉ cần tải xuống perlplugin từ trang web MobaXTerm .


3
tail -f /var/log/logname | source-highlight -f esc -s log

7
source-highlightkhông phải là một lệnh được cài đặt rộng rãi, vì vậy ít nhất bạn nên cung cấp một liên kết đến trang web của dự án.
Gilles

Có sẵn trong Fedora 19.
sjas

Và Ubuntu 12.10.
sjas

Trông thật tuyệt Đây là một gói lớn so với các gói khác trong danh sách này (26MB). Nó hỗ trợ một danh sách lớn các ngôn ngữ. Nó có thể được tùy chỉnh sửa đổi các tệp cấu hình có tại: /usr/share/source-highlight/*.lang (Ubuntu). Nếu bạn cần một cái gì đó đơn giản, hãy đi với ccze hoặc colortail.
Lepe

có vẻ như nó phụ thuộc vào mức tăng, khoảng 462 MB
ecsos

3

Một giải pháp hoạt động để tô màu tất cả các loại văn bản, không chỉ logfiles, là một công cụ Python, ' colout '.

pip install colout
myprocess | colout REGEX_WITH_GROUPS color1,color2... [attr1,attr2...]

Trong đó bất kỳ văn bản nào trong đầu ra của 'my process' khớp với nhóm 1 của regex sẽ được tô màu bằng color1, nhóm 2 với color2, v.v.

Ví dụ:

tail -f /var/log/mylogfile | colout '^(\w+ \d+ [\d:]+)|(\w+\.py:\d+ .+\(\)): (.+)$' white,black,cyan bold,bold,normal

tức là nhóm regex đầu tiên (parens) khớp với ngày ban đầu trong logfile, nhóm thứ hai khớp với tên tệp python, số dòng và tên hàm và nhóm thứ ba khớp với thông điệp tường trình xuất hiện sau đó. Điều này trông giống như:

logfile với định dạng màu

Lưu ý rằng các dòng hoặc các phần của dòng không khớp với bất kỳ biểu thức chính nào của tôi vẫn được lặp lại, do đó, đây không giống như 'grep --color' - không có gì được lọc ra khỏi đầu ra.

Rõ ràng điều này đủ linh hoạt để bạn có thể sử dụng nó với bất kỳ quy trình nào, không chỉ là các logfiles. Tôi thường chỉ cần đánh một regex mới bất cứ khi nào tôi muốn tô màu một cái gì đó. Vì lý do này, tôi thích colout hơn bất kỳ công cụ tô màu logfile tùy chỉnh nào, bởi vì tôi chỉ cần học một công cụ, bất kể tôi đang tô màu gì: ghi nhật ký, đầu ra thử nghiệm, cú pháp tô sáng đoạn mã trong thiết bị đầu cuối, v.v.


1
Tôi chưa thấy một câu trả lời nào đã sửa đổi tệp nhật ký nguồn
Dani_l

@Dani_l Đúng rồi bạn! Vào thời điểm tôi viết bài này, tôi phải bối rối bằng cách lật qua lại giữa câu hỏi này và một câu hỏi tương tự, trong đó có nhiều câu trả lời về cách định cấu hình ghi nhật ký sao cho các ký tự ANSI được ghi trực tiếp vào tệp nhật ký. Tôi sẽ xóa khiếu nại đó khỏi câu trả lời của tôi.
Jonathan Hartley

2

Ổ cắm không biết xấu hổ: Tôi đã viết một công cụ có tên TxtStyle , hoạt động tương tự như các tùy chọn được đề cập trước đó. Bạn có thể chạy nó như sau:

tail -f /var/log/syslog | txts --regex '\d+'

Bạn cũng có thể xác định kiểu được đặt tên trong tệp cấu hình ( ~/.txts.conf) và sử dụng kiểu như vậy:

ifconfig | txts --name ifconfig

( ifconfigkiểu được xác định ngoài hộp)


2

grc cho chắc chắn!

tùy chỉnh collors của bạn với regex trong tệp: ~ .grc / conf.tail (hoặc bất kỳ tên nào bạn muốn)

regexp=.*(select .*)$
colours=unchanged,cyan
=====
regexp=.*(update .*)$
colours=unchanged,bold yellow
=====
regexp=.*(insert .*)$
colours=unchanged,bold yellow
=====
regexp=.*(emp=\d+).*
colours=unchanged,reverse green
=====
regexp=.*http.*/rest/contahub.cmds.(.*?)/(\w*).*$
colours=unchanged,green,magenta
=====
regexp=.*http.*/M/.*\.(.*?Facade)/(\w*).*$
colours=unchanged,underline green,underline magenta

dòng lệnh:

grc -c conf.tail tail -f log/tomcat/catalina.out

các kết quả: ảnh chụp màn hình

thông tin để định cấu hình grc: https://github.com/manjuraj/config/blob/master/.grc/sample.conf


1

Tôi đã viết một hàm bash chấp nhận tối đa ba tham số và thực hiện bộ lọc giống như grep trên tệp văn bản và xuất văn bản ra màn hình màu.

Tôi cũng muốn thấy một chức năng đuôi sẽ làm điều này, nhưng chưa tìm thấy một chức năng nào.

Chức năng này cũng có thể được cải thiện - Tôi đánh giá cao bất kỳ trợ giúp nào về cách làm cho nó tốt hơn.

function multigrep(){

    #THIS WORKS - Recreate this, using input parameters
    #sed -En '/(App)|(Spe)/p' ./flashlog.txt;

    filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt";
    paramString="";

    for element in "$@"
        do
            #echo $element;
            paramString="$paramString($element)|";
        done

    #TRIM FINAL | OFF PARAMSTRING
    paramString=${paramString:0:${#paramString}-1};

    #CREATE SED EXPRESSION - '/($1)|($2)|(...)/p'
    paramString="'/$paramString/p'";

    #CREATE SED FUNCTION, CALL ON FILE
    paramString="sed -En $paramString ./flashlog.txt"

    echo $paramString;
    echo "${txtbld}$(tput setaf 7)" > ./flashlog_output.txt;
    eval $paramString >> ./flashlog_output.txt;
    echo >> ./flashlog_output.txt;
    #cat ./flashlog_output.txt;

    cat ./flashlog_output.txt | while read LINE
    do

        [[  $1 && ${1-x} ]] && 
            if grep -q $1 <<<$LINE; then
                echo "$(tput setaf 3)$LINE"
            fi

        [[  $2 && ${2-x} ]] && 
            if grep -q $2 <<<$LINE; then
                echo "$(tput setaf 7)$LINE"
            fi


        [[  $3 && ${3-x} ]] && 
            if grep -q $3 <<<$LINE; then
                echo "$(tput setaf 6)$LINE"
            fi

    done
}

1

chắc chắn rồi !

Tôi đã viết một hàm dài gọi là "egrepi", dựa trên 8 định nghĩa biến màu. Điều này chỉ hoạt động như một chức năng màu "đuôi -f".

1. setColors

đầu tiên, chức năng biến màu được gọi lúc đầu:


setColors ()
{
set -a
which printf >/dev/null 2>&1 && print=printf || print=print # Mandriva doesn't know about printf

hide='eval tput civis'
show='eval tput cnorm'
CLS=$(tput clear)
bel=$(tput bel)

case ${UNAME} in
AIX)
# text / foreground
N=$(${print} '\033[1;30m')
n=$(${print} '\033[0;30m')
R=$(${print} '\033[1;31m')
r=$(${print} '\033[0;31m')
G=$(${print} '\033[1;32m')
g=$(${print} '\033[0;32m')
Y=$(${print} '\033[1;33m')
y=$(${print} '\033[0;33m')
B=$(${print} '\033[1;34m')
b=$(${print} '\033[0;34m')
M=$(${print} '\033[1;35m')
m=$(${print} '\033[0;35m')
C=$(${print} '\033[1;36m')
c=$(${print} '\033[0;36m')
W=$(${print} '\033[1;37m')
w=$(${print} '\033[0;37m')
END=$(${print} '\033[0m')

# background
RN=$(${print} '\033[6;40m')
Rn=$(${print} '\033[40m')
RR=$(${print} '\033[6;41m')
Rr=$(${print} '\033[41m')
RG=$(${print} '\033[6;42m')
Rg=$(${print} '\033[42m')
RY=$(${print} '\033[6;43m')
Ry=$(${print} '\033[43m')
RB=$(${print} '\033[6;44m')
Rb=$(${print} '\033[44m')
RM=$(${print} '\033[6;45m')
Rm=$(${print} '\033[45m')
RC=$(${print} '\033[6;46m')
Rc=$(${print} '\033[46m')
RW=$(${print} '\033[6;47m')
Rw=$(${print} '\033[47m')

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)
;;
*)
# text / foreground
n=$(tput setaf 0)
r=$(tput setaf 1)
g=$(tput setaf 2)
y=$(tput setaf 3)
b=$(tput setaf 4)
m=$(tput setaf 5)
c=$(tput setaf 6)
w=$(tput setaf 7)
N=$(tput setaf 8)
R=$(tput setaf 9)
G=$(tput setaf 10)
Y=$(tput setaf 11)
B=$(tput setaf 12)
M=$(tput setaf 13)
C=$(tput setaf 14)
W=$(tput setaf 15)
END=$(tput sgr0)

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)

# background
Rn=$(tput setab 0)
Rr=$(tput setab 1)
Rg=$(tput setab 2)
Ry=$(tput setab 3)
Rb=$(tput setab 4)
Rm=$(tput setab 5)
Rc=$(tput setab 6)
Rw=$(tput setab 7)
RN=$(tput setab 8)
RR=$(tput setab 9)
RG=$(tput setab 10)
RY=$(tput setab 11)
RB=$(tput setab 12)
RM=$(tput setab 13)
RC=$(tput setab 14)
RW=$(tput setab 15)
;;
esac

BLUEf=${B}
BLUE=${b}
REDf=${R}
RED=${r}
GREENf=${G}
GREEN=${g}
YELLOWf=${Y}
YELLOW=${y}
MANGENTAf=${M}
MANGENTA=${m}
WHITEf=${W}
WHITE=${w}
CYANf=${C}
CYAN=${c}

OK="${RG}${n}OK${END}"
KO="${RR}${n}KO${END}"
NA="${N}NA${END}"

COLORIZE='eval sed -e "s/{END}/${END}/g" -e "s/{HIGH}/${HIGH}/g" -e "s/{SMUL}/${SMUL}/g" -e "s/{RMUL}/${RMUL}/g" -e "s/{BLINK}/${BLINK}/g" -e "s/{REVERSE}/${REVERSE}/g" -e "s/{REVERSO}/${REVERSO}/g"'
LOWS=' -e "s/{n}/${n}/g" -e "s/{r}/${r}/g" -e "s/{g}/${g}/g" -e "s/{y}/${y}/g" -e "s/{b}/${b}/g" -e "s/{m}/${m}/g" -e "s/{c}/${c}/g" -e "s/{w}/${w}/g"'
HIGHS=' -e "s/{N}/${N}/g" -e "s/{R}/${R}/g" -e "s/{G}/${G}/g" -e "s/{Y}/${Y}/g" -e "s/{B}/${B}/g" -e "s/{M}/${M}/g" -e "s/{C}/${C}/g" -e "s/{W}/${W}/g"'
REVLOWS=' -e "s/{Rn}/${Rn}/g" -e "s/{Rr}/${Rr}/g" -e "s/{Rg}/${Rg}/g" -e "s/{Ry}/${Ry}/g" -e "s/{Rb}/${Rb}/g" -e "s/{Rm}/${Rm}/g" -e "s/{Rc}/${Rc}/g" -e "s/{Rw}/${Rw}/g"'
REVHIGHS=' -e "s/{RN}/${RN}/g" -e "s/{RR}/${RR}/g" -e "s/{RG}/${RG}/g" -e "s/{RY}/${RY}/g" -e "s/{RB}/${RB}/g" -e "s/{RM}/${RM}/g" -e "s/{RC}/${RC}/g" -e "s/{RW}/${RW}/g"'
# COLORIZE Usage:
# command |${COLORIZE} ${LOWS} ${HIGHS} ${REVLOWS} ${REVHIGHS}

set +a
}

2. egrepi

và chức năng egrepi, hiệu quả và thanh lịch: chu kỳ màu giữa 8 màu trở lên (nhu cầu của bạn) VÀ được thử nghiệm dưới 3 hệ điều hành unix khác nhau, với các nhận xét:


# egrepi() egrep with 8 REVERSE cyclic colorations on regexps almost like egrep
# egrepi 
# current script will work for KSH88, KSH93, bash 2+, zsh, under AIX / Linux / SunOS
egrepi ()
{
args=$*
# colorList=wBcgymrN                                                # KSH93 or bash 3+, not for AIX
# set -A color                                                  # needed with older sh
color[0]=$Rw; color[1]=$RB; color[2]=$Rc; color[3]=$Rg; color[4]=$Ry; color[5]=$Rm; color[6]=$Rr; color[7]=$RN; # this is the only one AIX solution
i=0
unset argsToGrep argsSedColor argsPerlColor

for arg in ${args}
do
    [ "${arg}" == "." ] && arg=\\.                              # if you wanna grep "."
    # color=R${colorList:((${RANDOM: -1:1})):1}                     # bash RANDOMized colors
    # color=R${colorList:$i:1} && let i++ && ((i==8)) && i=0                # KSH93 or bash 3+, not for AIX
    argsToGrep="${argsToGrep}${argsToGrep:+|}${arg}"
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${!color}&${w}#gI"            # AIX KSH88 do not recognise this fucking variable double expansion
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${color[$i]}&${w}#gI"         # AIX neither do include sed with Ignore case
    argsPerlColor="${argsPerlColor}${argsPerlColor:+,}s#${arg}#$n${color[$i]}$&${END}#gi"   # So: gotta use perl
    let i+=1 && ((i==8)) && i=0                             # AIX KSH88 do not recognise "let i++"
done
# egrep -i "${argsToGrep}" | sed ${argsSedColor} | egrep -v "grep|sed"              # AIX sed incompatibility with Ignore case
# (($# > 0)) && (egrep -i "${argsToGrep}" | perl -p -e ${argsPerlColor}) || cat         # this line colors & grep the words, will NOT act as "tail -f"
(($# > 0)) && (perl -p -e ${argsPerlColor}) || cat                      # this line just colors the words
}

3. Cách sử dụng

lệnh | egrepi word1 .. wordN



1

Đối với các mã màu, tôi sẽ sử dụng tput:

red=$( tput -Txterm setaf 1 )
norm=$( tput -Txterm sgr0 )
bold=$( tput -Txterm bold )

Xem để tham khảo: man tput

Sau đó:

tail -F myfile.log | sed "s/\(.ERROR.*\)/$red$bold\1$norm/g"

Cảm ơn rất nhiều. Hoạt động như một bùa mê với các chức năng vỏ tiêu chuẩn.
vquintans

0

Xuất bản một thời gian trước tiện ích Node Js - log-color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.