使用 Unix 命令从日志中查找具有匹配模式的行

Grep lines from the log with matching pattern using Unix command

我有这种格式的日志。我只想获取计数超过 5000 的日志。

匹配模式应为计数 [值大于 5000]

INFO 56783 Count [5987] 
INFO 67988 Count [4986] 
INFO 27679 Count [9865] 

在上面的例子中,输出应该只有

 INFO 56783 Count [5987] 

我使用的格式如下

sudo cat <path to log> | grep 'Count [5[0-9][0-9][0-9]]'

任何想法这里缺少什么

你可以使用这个 grep:

grep -E 'Count \[[5-9][0-9]{3,}\]' file

INFO Count [5987]
INFO Count [9865]

这里的正则表达式模式是 \[[5-9][0-9]{3,}\] 匹配 a:

  • \[: 比赛开始[
  • [5-9]:匹配59
  • 之间的数字
  • [0-9]{3,}:匹配3个或更多数字
  • \]:比赛结束]

这将匹配 5000[...] 中大于 5000 的整数。

但是,您应该使用 awk 来完成这项工作以获得最大的灵活性:

awk ' == "Count" && gsub(/[][]/, "", ) && +0 > 5000' file

INFO Count 5987
INFO Count 9865

你可以使用

awk -F'[][]' '/Count \[[0-9]+]/ &&  > 5000' file

字段分隔符匹配][/Count \[[0-9]+]/ && > 5000只输出包含Count [<number>]且字段2大于5K的行。

参见 online demo:

#!/bin/bash
s='INFO Count [5987] 
INFO Count [4986] 
INFO Count [9865] '
awk -F'[][]' '/Count \[[0-9]+]/ &&  > 5000' <<< "$s"

输出:

INFO Count [5987] 
INFO Count [9865]