正则表达式模式找到一行,然后在行内查找一个数字

时间:2013-06-26 14:56:40

标签: regex grep

您好我有一些日志文件可以记录软件的执行时间,在日志文件中的某处我有与此类似的行:

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

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

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

请帮助

7 个答案:

答案 0 :(得分:2)

易:

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

使用GNU grep进行测试

grep -E "BuildStops.BuildStop.AddConsignee:.*[[:digit:]]{5,}ms"

答案 3 :(得分:0)

此模式可以匹配10000ms,100000ms等。它与9999ms不匹配。

grep -E 'BuildStops.BuildStop.AddConsignee:[[:space:]]+[[:digit:]]{5,}ms'

答案 4 :(得分:0)

怎么样

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

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

所以

"BuildStops.BuildStop.AddConsignee: [1-9]([0-9]){4}"

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

awk解决方案:

awk '/BuildStops\.BuildStop\.AddConsignee:/ && $NF+0>10000' System_2013626.log
  • $NF+0将在整数中评估执行时间,丢弃 ms