shell 脚本 + 匹配日志文件中的 MAJOR 和 CRITICAL 字符串

shell 脚本 + 匹配日志文件中的 MAJOR 和 CRITICAL 字符串

我需要匹配包含 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语句)。它取决于前三个字段中是否出现空格或制表符。

相关内容