使用 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]
:匹配5
到9
之间的数字
[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]
我有这种格式的日志。我只想获取计数超过 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]
:匹配5
到9
之间的数字
[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]