bash는 파일의 대소문자 일치 패턴을 무시하고 줄 색상을 지정하고 모든 것을 화면에 인쇄합니다.

bash는 파일의 대소문자 일치 패턴을 무시하고 줄 색상을 지정하고 모든 것을 화면에 인쇄합니다.

내가 원하는 것은 cat로그 파일을 가져와서 패턴 일치에 따라 특정 줄을 색상으로 강조 표시하는 것입니다.하지만도착하다대소문자 무시. 예를 들어:

  • 로그 파일에 성공이라는 단어가 나타나면 해당 줄을 녹색으로 설정합니다.
  • 오류가 발견되면 선을 빨간색으로 표시하는 등의 작업을 수행합니다.

이것이 내가 지금까지 가지고 있는 것입니다. 이것은 cat과 awk를 기반으로 합니다(물론 제가 사용할 때는 man awkman을 대신 사용합니다 gawk). 저는 데비안 Jessie를 사용하고 있습니다.

 #!/bin/bash

[ $# -ge 1 -a -f "$1" ] && logfile="$1" || logfile="-"
cat $logfile | awk '
/install/ {print "\033[32m" $0 "\033[39m"}
/success/ {print "\033[32m" $0 "\033[39m"}
/status/ {print "\033[33m" $0 "\033[39m"}
/info/ {print "\033[33m" $0 "\033[39m"}
/error/ {print "\033[31m" $0 "\033[39m"}
/fail/ {print "\033[31m" $0 "\033[39m"}
'

다양한 것을 사용해 보았으나 결국 모든 텍스트가 단색이 되거나, 색상이 없거나, 대소문자가 무시되지 않게 되었습니다. IGNORECASE=1과 같은 것은 작동하지 않는 것 같습니다.

방금 다른 질문에서 이 스크립트를 가져왔으므로 다른 것을 사용하게 되어 기쁩니다. 아래는 누군가가 새로운 스크립트를 제안하고 싶어할 경우를 대비해 제가 원하는 것입니다.

  1. 파일 이름 뒤에 명령을 사용하고 내용을 터미널에 인쇄합니다(bash를 사용하는 것이 이상적입니다).
  2. 내 스크립트에서 일치시킬 문자열을 추가하고 로그/텍스트 파일의 이 줄이 화면에 인쇄될 때 색상이 나타나도록 하고 싶습니다. 예를 들어. 오류라는 단어를 찾아 선을 빨간색으로 칠합니다.
  3. 일치시키려는 단어의 대소문자를 무시합니다. "error", "error"라는 단어를 찾거나 "error" 또는 "error" 등과 같이 대문자와 소문자의 조합을 찾습니다. 그러면 해당 줄이 화면에 빨간색으로 인쇄됩니다.

아이디어는 아파치 액세스 로그와 같은 것뿐만 아니라 일부 백업의 중요한 부분을 쉽게 발견할 수 있다는 것입니다. 내가 원하는 중요한 키워드를 찾아 간단하게 스크립트에 추가하겠습니다.

다음은 로그 파일의 시작과 끝 부분에 대한 예입니다.

INFO: tar attempt number 0
/home/user/domains/
/home/user/domains/website.com/
/home/user/domains/website.com/logs/
/home/user/domains/website.com/logs/Apr-2015.tar.gz.4
/home/user/domains/website.com/logs/Apr-2015.tar.gz
/home/user/domains/website.com/logs/Apr-2015.tar.gz.1
/home/user/domains/website.com/logs/Apr-2015.tar.gz.3
/home/user/domains/website.com/logs/Apr-2015.tar.gz.2
/home/user/domains/website.com/public_html/
/home/user/domains/website.com/public_html/api.php
/home/user/domains/website.com/public_html/index.html
/home/user/domains/website.com/public_html/favicon.ico
/home/user/domains/website.com/public_html/favicon1.ico
SUCCESS: website tar exists.
INFO: DB backup dump, attempt number 0
SUCCESS: DB backup file created.
/home/user/dakka_backups/user_db-Thu.2015-04-30.sql
INFO: CN Website and DB backed up on Thu.2015-04-30.

답변1

awk에는 "tolower"라는 기능이 있습니다.

cat $logfile | awk '
     tolower($0) ~ /install/ {print "\033[32m" $0 "\033[39m"; next;}
     tolower($0) ~ /success/ {print "\033[32m" $0 "\033[39m"; next;}
     tolower($0) ~ /status/ {print "\033[33m" $0 "\033[39m";  next;}
     tolower($0) ~ /info/ {print "\033[33m" $0 "\033[39m";    next;}
     tolower($0) ~ /error/ {print "\033[31m" $0 "\033[39m";   next;}
     tolower($0) ~ /fail/ {print "\033[31m" $0 "\033[39m";    next;}
     { print; }
'

shopt -s nocasematchBash를 사용하면 대소문자를 구분하지 않는 패턴 일치를 사용할 수 있습니다 . 예를 들어.

mystring="AbCdEfG"
shopt -s nocasematch
if [[ ${mystring} == abcdefg ]] ; then
     echo "is a match!!"
fi

관련 정보