嗨,我有一些日志文件记录来自软件的操作及其执行时间,在日志文件的某处,我有与此类似的行:
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
如果我做grep "BuildStops.BuildStop.AddConsignee:" System_2013626.log
我可以得到所有的行,但我正在尝试创建一个模式,让我可以找到包含超过 10,000 毫秒执行时间的行
请提供任何帮助
简单的:
grep -E "BuildStops\.BuildStop\.AddConsignee: ([5-9][0-9]{3}|[0-9]{5})" System_2013626.log
仅当(至少)五位数字出现在该位置或以至少 . 开头的四位数字时,这才匹配该行5
。另外,不要忘记逃避文字点。
使用以下内容:
grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file
它查找 5 位数字,即模式数字 >=10,000 完成。
$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
$ grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
所以我希望它更有活力,有时我想寻找超过 10,000 有时我想寻找超过 4000
我们可以将 4000 定义为:
-[4-9]
加上 3 位数字。
- 至少 5 位数字。
$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 3198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
12345
$ grep -E "BuildStops.BuildStop.AddConsignee: ([4-9][[:digit:]]{3}|[[:digit:]]{5})" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
用 GNU grep 测试
grep -E "BuildStops.BuildStop.AddConsignee:.*[[:digit:]]{5,}ms"
此模式可以匹配 10000 毫秒、100000 毫秒等。它与 9999 毫秒不匹配。
grep -E 'BuildStops.BuildStop.AddConsignee:[[:space:]]+[[:digit:]]{5,}ms'
怎么样
^[1-9]([0-9]){4}
以数字 1-9 开头,然后是 4 个或更多数字 0
所以
"BuildStops.BuildStop.AddConsignee: [1-9]([0-9]){4}"
grep "BuildStops\.BuildStop\.AddConsignee: \+[1-9][0-9]\{4,\}ms"
后面的\+
空格匹配“至少一个”空格。\{4,\}
后面的意思是 0 到 9 之间的[0-9]
“至少 4”位数字。
awk
解决方案:
awk '/BuildStops\.BuildStop\.AddConsignee:/ && $NF+0>10000' System_2013626.log
$NF+0
将以整数形式评估执行时间,丢弃ms。