我想要的是cat
一个日志文件并根据模式匹配用颜色突出显示某些行但到忽略大小写。例如:
- 当日志文件出现成功一词时,将该行设为绿色。
- 当发现错误时,将该行设为红色等。
这是我到目前为止所拥有的。它基于 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 是理想的选择)
- 在我的脚本中,我想添加字符串进行匹配,并使日志/文本文件中的这些行在打印到屏幕上时具有某种颜色。例如。找到错误一词并将该行设为红色
- 忽略我想要匹配的单词的大小写,例如。找到单词“错误”、“错误”或大小写的任意组合,例如“错误”或“错误”等。然后将该行以红色打印到屏幕上。
这个想法是能够轻松地发现我的一些备份中的重要部分,以及诸如 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.
答案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; }
'
使用 Bash,您可以用于shopt -s nocasematch
不区分大小写的模式匹配。例如。
mystring="AbCdEfG"
shopt -s nocasematch
if [[ ${mystring} == abcdefg ]] ; then
echo "is a match!!"
fi