![shell 脚本 + 匹配日志文件中的 MAJOR 和 CRITICAL 字符串](https://linux22.com/image/574174/shell%20%E8%84%9A%E6%9C%AC%20%2B%20%E5%8C%B9%E9%85%8D%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20MAJOR%20%E5%92%8C%20CRITICAL%20%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我需要匹配包含 MAJOR 和 CRITICAL 字符串的行
单词 ERROR:< 任何整数 > 后面的内容
请建议如何使用一个 awk 或 sed 命令来做到这一点?
more HW_Log.txt
CHK_HW ERROR:0 INFO self_monitor Verifying HW machine
CHK_HW ERROR:1 MAJOR self_monitor Verifying HW machine
CHK_HW ERROR:1 CRITICAL self_monitor Verifying HW machine
答案1
可以使用如下方法完成grep
:
$ grep "ERROR:[0-9]* \(CRITICAL\|MAJOR\)" /path/to/file
答案2
awk
命令:
awk '/ERROR\:[0-9]+[ \t]+(CRITICAL|MAJOR)/ {print}' path_to_file
sed
命令:
sed -ne '/ERROR\:[0-9]\+[ \t]\+\(CRITICAL\|MAJOR\)/p' path_to_file
awk
描述:
'/ERROR\:[0-9]+[ \t]+(CRITICAL|MAJOR)/ {print}'
^ ^
regexp command
- [0-9]+ - 一个或多个数字
- [ \t]+ - 一个或多个空格和制表符
- (严重|严重) - “严重”或“严重”
- print-打印行
sed
描述:
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
'/ERROR\:[0-9]\+[ \t]\+\(CRITICAL\|MAJOR\)/p'
^ ^
regexp command
- [0-9]\+ - 一个或多个数字
- [ \t]\+ - 一个或多个空格和制表符
- \(CRITICAL\|MAJOR\) - “CRITICAL” 或 “MAJOR”
- p——打印行
答案3
在 awk 中执行此操作的另一种方法:
awk '$2 ~ /^ERROR:[[:digit:]]+/ && $3 ~ /^(MAJOR|CRITICAL)/' HW_Log.txt
这只会在指定的字段中查找字符串,因此如果它们出现在行中的其他地方,它将忽略它们。它依赖于 awk 的默认行为来打印匹配的行(这就是为什么没有显式print
语句)。它取决于前三个字段中是否出现空格或制表符。