tail -f가 컬러 출력을 표시하는 방법


265

다음과 같은 메시지가있는 서버 로그 파일의 출력을 조정할 수 있기를 원합니다.

INFO
SEVERE

등이 있고이면 SEVERE줄을 빨간색으로 표시하십시오. INFO녹색 인 경우 tail이 작업을 수행하는 데 도움이 되는 명령에 어떤 종류의 별칭을 설정할 수 있습니까?


답변:


234

multitail을 사용해보십시오 . 이것은 übergeneralization입니다 tail -f. 별도의 창에서 여러 파일을 볼 수 있으며, 내용에 따라 선을 강조 표시하는 등의 작업을 수행 할 수 있습니다.

multitail -c /path/to/log

색상을 구성 할 수 있습니다. 기본 색 구성표가 작동하지 않으면 구성 파일에 고유 한 색 구성표를 작성하십시오. 예를 들어 multitail -cS amir_log /path/to/log다음을 호출 하십시오 ~/.multitailrc.

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

비표준 도구 를 설치하는 것이 불편한 서버에있는 경우 또 다른 솔루션 은 tail -fsed 또는 awk와 결합 하여 색상 선택 제어 시퀀스를 추가하는 것입니다. 이것은 필요 tail -f모든 구현이 작업을 수행 할 경우 표준 출력 파이프 경우에도, 나도 몰라 지체없이 표준 출력을 플러시.

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

또는 sed

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

sed가 GNU sed가 아닌 경우 \o033리터럴 이스케이프 문자로 바꾸고 제거하십시오 --unbuffered.

또 다른 가능성은 Emacs 쉘 버퍼 tail -f에서 실행 하고 Emacs의 구문 색상 지정 기능을 사용하는 것입니다.


당신은 어떻게 이것을 할 수 sed있습니까? (게으르고 스스로 알아 채지 못해서 죄송합니다!) 그러나 sed예 를 추가해 주시겠습니까 ?
알리

5
@Ali Sed는 이스케이프 문자에 대한 구문이 없으므로 편리하지 않습니다. 문자 그대로 스크립트에 포함 시키거나 셸 인용 방법을 사용하여 작업해야합니다. awk를 사용하는 것이 좋습니다.
Gilles

8
@Gilles tail -fwith awk코드에서 문자열에 INFOSEVERE 가 없으면 문자열이 인쇄되지 않습니다. 나머지 문자열을 어떻게 인쇄 합니까? (줄을 채색 할 필요는 없습니다)
Benjamin

6
@Benjamin ; next닫는 중괄호 앞에 추가 프로세스를 건너 뛰고 1 {print}끝에 새 처리 라인 을 추가하십시오 ( 1항상 의미).
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 , 일반 착색제는 매우 시원합니다.

apt-get install grc

그냥 해

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

즐기세요!

GitHub 에서도 찾을 수 있습니다 .


2
이것이 바로 내가 필요한 것입니다 : 가볍고 간단합니다. 채색은 내 로그 유형 (맞춤 로그)에 정확히 맞지 않지만 어떤 채색이라도 쉽게 로그를 따라갈 수 있습니다.
rennat

나를 위해 데비안에서 'grc'오류 : OSError : [Errno 13] 권한이 거부되었습니다. 또한 설치중인 Python에 따라 다르므로 이미 설치하지 않은 경우 비교적 가볍지 않습니다. 나는 'ccze'가 훨씬 더 잘 작동한다는 것을 알았습니다. 'tail -f -n 50 /var/log/starbound-server.log | ccze -A '.
Daniel Sokolowski

1
Ubuntu의 grc 기본 설정은 syslogs 또는 mail.log에 적합하지 않습니다. 사용자 정의하는 방법을 이해하는 것은 쉽지 않습니다.
lepe

1
멀티 테일보다 색상을 더 빠르고 쉽게 채울 수있는 방법을 찾았습니다. CentOS 시스템의 소스를 통해 빠른 설치를하고 인생을 업그레이드했습니다. 다른 시스템에도 설치됩니다.
zeeshan

4
이것은 nginx 로그에서 매우 끔찍해 보입니다. i.imgur.com/aJbIOfL.png
mpen

51

ccze보셨습니까 ? 옵션을 사용 -c하거나 구성 파일에서 직접 일부 키워드의 기본 색상을 사용자 정의 할 수 있습니다 . 색상을 지정한 후 화면이 지워지면 옵션을 사용해야합니다 -A.

편집하다:

완전한 선을 빨간색으로 표시하려면 다음을 시도해보십시오.

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

\e[1;31m당신에게 붉은 색을 줄 것입니다. 노란색을 원하면을 사용 \e[1;33m하고 녹색으로 사용하십시오 \e[1;32m. 는 \e[0m일반 텍스트 색상을 복원합니다.


1
이것은 Mac에서 작동하지 않습니다. Linux에서 작동하기 때문에 투표하고 있습니다.
Amir Afghani

perl / ansi 트릭은 그렇지 않지만 ccze는 그렇지 않기 때문에 상향 조정.
Shadur

1
다음 \007과 같이 정규식 끝에 추가하여 터미널에서 경고 또는 "경고음"을 보내도록 할 수도 있습니다 perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. tmux를으로 사용 set -g bell-action any하는 경우 훌륭하게 작동합니다.이 경우 다른 창에 로그 꼬리가 있으면 정규 표현식이 일치 할 때마다 해당 창 이름이 경고합니다.
jonyamo 2013

@ AmirAfghani이 사이트는 Linux / unix SE 사이트이므로 Mac에서 작동한다고 생각하는 이유를 잘 모르겠습니다.
BЈовић

1
@ BЈовић Mac은 유닉스입니다.
Chris Down

34

고급 로그 파일 뷰어 인 lnav를 살펴보십시오 .

내비게이션 내비게이션

다양한 형식으로 인쇄 할 수도 있습니다.

전에:

lnav-before-pretty

후:

내비게나


로그 분석 도구 키트에 추가 된 멋진 기능입니다. 제안 해 주셔서 감사합니다.
Patrik Alienus

24

정규 표현식을 기반으로 선을 채색 하는 rainbow 을 사용할 수 있습니다 .

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

또한 Tomcat 로그 와 같이 사전 정의 된 구성 이 번들로 제공됩니다 .

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

(면책 조항 : 나는 저자입니다)


2
나는이 질문에 제공된 다른 솔루션의 대부분을 시도했지만 레인보우는 매일 사용하는 6 (!) 환경 인 sun, aix, linux, termux, darwin 및 cygwin에서 동등하게 잘 작동하는 유일한 솔루션이었습니다. 다른 모든 플랫폼은 적어도 일부 플랫폼에 대해 이식 불가능한 빌드 프로세스가 어렵습니다.
Stabledog

1
rainbow굉장하다. 당신은 저자입니까? 그렇다면 해당 속성으로 답변을 수정하십시오.
주교

예, 죄송합니다. 편집
nicoulaj

15

colortail 을 사용할 수 있습니다 :

colortail -f /var/log/messages

2
우분투 리포지토리에서 +1 가능 ccze와 비교하여 내가 colortail을 좋아하는 것은 RegEx를 사용하여 자유롭게 패턴을 사용자 정의 할 수 있다는 것입니다. 사용 가능한 색상 : 검정, brightblack, 흰색, brightwhite, 마젠타, brightmagenta, 시안, brightcyan, 녹색, 밝은 녹색, 노란색, 밝은 노란색, 빨간색, 밝은 빨강, 파랑, 밝은 파랑. 불행히도 굵은 체 또는 주황색과 같은 다른 색상을 설정하는 방법은 없습니다.
lepe

내 이전 의견에 대해 한 가지 점을 수정하고 싶습니다. "밝은"+ 색상에 "굵게"포함 (일부 색상은 실제로 더 밝게
표시됨

우분투 18에서 이것을 시도했지만 작동하지 않았습니다. 설정이 여러 단계이며 지침이 모호합니다. 여전히 그것이 내가 잘못한 부분인지 확실하지 않습니다. 마지막 부분이 더 명확해질 수 있습니다. "이후 예제 구성 파일을 다른 곳에 복사하고 편집 할 수 있습니다. ~ / .colortail /에 파일이 있습니다"
Dawoodjee

colortail을 설치하면 apt install colortail~ / .colortail /을 편집하지 않고도 작동합니다.
Kartik M

11

또한 일치하는 정규 표현식 하나만 찾으려면 GNU grep --color이 작동 tail합니다. 출력을 파이프로 연결하면됩니다.


OP는 필터링하지 않고 출력 만 강조 하고 싶었 습니다. Grep은 일치하지 않는 줄을 표시하지 않습니다 ...
Coderer

3
이라고 grep  -A9999  -B9999 regex하면 행에 일치하지 않는 10,000 개의 줄이 없으면 모든 줄이 표시됩니다. 빨간색으로 GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERE단어를 표시하고 SEVERE나머지 SEVERE 라인을 노란색으로 표시하고 다른 모든 (SEVERE가 아닌) 라인 (최대 9999)을 녹색 으로 표시하는 것과 같은 것을 사용하십시오 .
G-Man

파이프의 순서에 따라 --color=always그냥 grep 대신에 grep 을 전달해야 할 수도 --color있지만, 예, 이것은 상자에 설치된 tail (GNU coreutils) 8.27 작동합니다.
행크 슐츠

7

표준 명령이 좋아에서 색 출력을 얻으려면 grep, 당신은이를 설정해야합니다 alias.bashrc

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

파일에 무언가를 in 으면 다음과 같은 것을 볼 수 있습니다 (그러나 아마도 빨간색).

[root @ linuxbox mydir] # grep "\ (INFO \ | SEVERE \)"/ var / log / logname
이 항목은 정보가  
심각합니다이 항목은 경고입니다!
이 항목은입니다 INFO 
이 항목은입니다 정보 
SEVERE 이 항목은 경고입니다!

색상 을 사용 tail하거나 awk파이프에서 색상을 유지하려면 별명이 충분하지 않으므로 --color=always매개 변수 를 사용해야합니다. 예를 들면 다음과 같습니다.

[root @ linubox mydir] # grep --color = 항상 "\ (INFO \ | SEVERE \)"/ var / log / logname | 꼬리 -f | awk '{print $ 1}'
이 
심한
이
이
심한

awk스토리 와 함께 컬러 텍스트를 원한다면 약간 복잡하지만 더 강력합니다.

[root @ linubox mydir] # tail -f / var / log / messages | awk '{if ($ 5 ~ / INFO /) print "\ 033 [1; 32m"$ 0 "\ 033 [0m"; 그렇지 않으면 ($ 1 ~ / SEVERE /) print "\ 033 [1; 31m"$ 0 "\ 033 [0m"; 그렇지 않으면 $ 0} 인쇄
이 항목은 정보  
심각입니다.이 항목은 경고입니다!
이것은 또 다른 항목입니다
이 항목은 정보입니다
이것은 또 다른 항목입니다
이 항목은 정보가 
심각합니다이 항목은 경고입니다!

각 줄마다 고유 한 색상으로 표시됩니다.

다른 도구를 사용하여 쉘에서 색상이 지정된 텍스트를 얻는 다른 많은 방법이 있으며 다른 멤버가 잘 설명합니다.



6

@uloBasEI 답변을 기반으로을 사용하려고 시도 ... | perl ... | perl ...했지만 Linux 파이프가 약간 미쳐서 너무 느립니다. 모든 규칙을 하나의 perl명령 에만 넣으면 정상적으로 작동합니다.

예를 들어 아래와 같이 colorTail.plperl 파일을 만듭니다 .

#!/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";
}

다음과 같이 사용하십시오.

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

참고 : MobaXTerm 에서도 사용할 수 있습니다 ! MobaXTerm 사이트 perl에서 플러그인을 다운로드 하십시오.


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

7
source-highlight널리 설치되는 명령이 아니므로 최소한 프로젝트 사이트에 대한 링크를 제공해야합니다.
Gilles

Fedora 19에서 사용 가능.
sjas

그리고 우분투 12.10.
sjas

멋져 보인다. 이 목록의 다른 패키지에 비해 큰 패키지입니다 (26MB). 그것은 거대한 언어 목록을 지원합니다. /usr/share/source-highlight/*.lang(Ubuntu)에있는 구성 파일을 수정하여 사용자 정의 할 수 있습니다. 간단한 것이 필요한 경우 ccze 또는 colortail을 사용하십시오.
lepe

부스트에 의존하는 것 같습니다. 약 462MB
ecsos

3

로그 파일뿐만 아니라 모든 종류의 텍스트를 색칠하는 데 사용되는 솔루션 중 하나는 Python 도구 인 ' colout '입니다.

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

정규식의 그룹 1과 일치하는 'myprocess'출력의 텍스트에 색상 1, 그룹 2에 색상 2 등이 표시됩니다.

예를 들면 다음과 같습니다.

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

즉, 첫 번째 정규식 그룹 (parens)은 로그 파일의 초기 날짜와 일치하고, 두 번째 그룹은 python 파일 이름, 줄 번호 및 함수 이름과 일치하고, 세 번째 그룹은 그 뒤에 오는 로그 메시지와 일치합니다. 이것은 다음과 같습니다

컬러 형식의 로그 파일

내 정규 표현식과 일치하지 않는 선이나 선의 일부가 여전히 에코되므로 'grep --color'와 같지 않습니다. 출력에서 ​​아무것도 필터링되지 않습니다.

분명히 이것은 테일링 로그 파일뿐만 아니라 모든 프로세스에서 사용할 수있을 정도로 유연합니다. 나는 보통 무언가를 색칠하고 싶을 때마다 즉시 새로운 정규 표현식을 채 웁니다. 이러한 이유로, 나는 채색하는 것에 상관없이 로깅, 테스트 출력, 터미널의 구문 강조 코드 조각 등 하나의 도구 만 배우면되기 때문에 모든 사용자 정의 로그 파일 채색 도구를 선호합니다.


1
소스 로그 파일을 수정 한 단일 답변을 보지 못했습니다
Dani_l

@Dani_l 맞아! 필자가이 글을 쓸 당시에는 이와 비슷한 질문 사이에서 앞뒤로 뒤집어서 혼란을 겪었을 것입니다. ANSI 문자가 로그 파일 자체에 직접 기록되도록 로깅을 구성하는 방법에 대한 많은 답변이있었습니다. 답변에서 해당 불만을 삭제하겠습니다.
Jonathan Hartley

2

뻔뻔한 플러그 : 앞서 언급 한 옵션과 비슷한 기능을 수행하는 TxtStyle 이라는 도구를 작성했습니다 . 다음과 같이 실행할 수 있습니다.

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

구성 파일 ( ~/.txts.conf) 에서 명명 된 스타일을 정의 하고 다음과 같이 사용할 수도 있습니다.

ifconfig | txts --name ifconfig

( ifconfig스타일은 상자에서 정의됩니다)


2

확실히 grc!

~ .grc / conf.tail 파일 (또는 원하는 이름)에서 정규식을 사용하여 콜렉터를 사용자 정의하십시오.

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

명령 줄 :

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

결과 : 스크린 샷

grc 구성을위한 정보 : https://github.com/manjuraj/config/blob/master/.grc/sample.conf


1

최대 3 개의 매개 변수를 허용하고 텍스트 파일에서 grep 같은 필터를 수행하고 텍스트를 화면에 컬러로 출력하는 bash 함수를 작성했습니다.

또한이 기능을 수행하지만 아직 찾지 못한 꼬리 함수를보고 싶습니다.

이 기능도 향상시킬 수 있습니다. 개선 방법에 대한 도움을 주셔서 감사합니다.

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

확실해!

나는 8 가지 색상 변수 정의를 기반으로 한 "egrepi"라는 함수를 오랫동안 사용했다. 이것은 "tail -f"컬러 함수처럼 파이프로만 작동합니다.

1. setColors

먼저 색상 변수가 처음에 호출됩니다.


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 기능은 효과적이고 우아합니다.


# 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. 사용법

명령 | egrepi word1 .. 워드 N



1

색상 코드는 tput을 사용합니다.

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

참조 : man tput

그때:

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

감사합니다 표준 쉘 기능을 가진 매력처럼 작동합니다.
vquintans

0

얼마 전에 Node Js 유틸리티 게시-log -color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.