1

嗨,我有一些日志文件记录来自软件的操作及其执行时间,在日志文件的某处,我有与此类似的行:

6/26/2013 6:56:43 AM -  >>> BuildStops.BuildStop.AddConsignee: 7198ms

如果我做grep "BuildStops.BuildStop.AddConsignee:" System_2013626.log

我可以得到所有的行,但我正在尝试创建一个模式,让我可以找到包含超过 10,000 毫秒执行时间的行

请提供任何帮助

4

7 回答 7

2

简单的:

grep -E "BuildStops\.BuildStop\.AddConsignee: ([5-9][0-9]{3}|[0-9]{5})" System_2013626.log

仅当(至少)五位数字出现在该位置或以至少 . 开头的四位数字时,这才匹配该行5。另外,不要忘记逃避文字点。

于 2013-06-26T14:58:41.463 回答
2

使用以下内容:

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
于 2013-06-26T14:58:42.813 回答
0

用 GNU grep 测试

grep -E "BuildStops.BuildStop.AddConsignee:.*[[:digit:]]{5,}ms"
于 2013-06-26T15:02:42.980 回答
0

此模式可以匹配 10000 毫秒、100000 毫秒等。它与 9999 毫秒不匹配。

grep -E 'BuildStops.BuildStop.AddConsignee:[[:space:]]+[[:digit:]]{5,}ms'
于 2013-06-26T15:03:49.120 回答
0

怎么样

^[1-9]([0-9]){4}

以数字 1-9 开头,然后是 4 个或更多数字 0

所以

"BuildStops.BuildStop.AddConsignee: [1-9]([0-9]){4}"
于 2013-06-26T15:05:07.273 回答
0

grep "BuildStops\.BuildStop\.AddConsignee: \+[1-9][0-9]\{4,\}ms"

后面的\+空格匹配“至少一个”空格。\{4,\}后面的意思是 0 到 9 之间的[0-9]“至少 4”位数字。

于 2013-06-26T15:15:15.600 回答
0

awk解决方案:

awk '/BuildStops\.BuildStop\.AddConsignee:/ && $NF+0>10000' System_2013626.log
  • $NF+0将以整数形式评估执行时间,丢弃ms
于 2013-06-26T17:37:53.533 回答