Shell-Script
文件中的bash忽略大小寫匹配模式並為該行著色,全部列印到螢幕上
我想要的是
cat
一個日誌文件,並根據模式匹配用顏色突出顯示某些行,但忽略case。例如:
- 當日誌文件包含成功一詞時,將該行設為綠色。
- 當它發現錯誤時,將該線變為紅色等。
這就是我到目前為止所擁有的。它基於 cat 和 awk (儘管當我使用時,
man awk
我得到了 mangawk
代替)。我正在使用 Debian 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 之類的東西似乎不起作用。
我很高興使用其他東西,因為我剛剛從另一個問題中提取了這個腳本。以下正是我想要的,以防有人想建議一個新腳本。
- 使用命令後跟文件名並將內容列印到終端(使用 bash 將是理想的)
- 在我的腳本中,我想添加字元串以匹配並在列印到螢幕時使日誌/文本文件中的這些行具有某種顏色。例如。找到單詞錯誤並將該行變為紅色
- 忽略我要匹配的單詞的大小寫,例如。找到單詞 error、ERROR 或大寫小寫的任意組合,例如 Error 或 ERRor 等。然後將該行以紅色列印到螢幕上。
這個想法是能夠輕鬆地發現我的一些備份中的重要部分,以及諸如 apache 訪問日誌之類的東西。我打算找到我所追求的重要關鍵詞,然後簡單地將它們添加到我的腳本中。
下面是一個日誌文件的開頭和結尾的片段作為範例:
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.
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; } '
使用 Bash,您可以
shopt -s nocasematch
用於不區分大小寫的模式匹配。例如。mystring="AbCdEfG" shopt -s nocasematch if [[ ${mystring} == abcdefg ]] ; then echo "is a match!!" fi