egrep 正则表达式超过五分钟

use*_*055 4 grep regular-expression

我在文本文件中有以下时间格式

       `1` equals one second.
    `5|01` equals five minutes and one seconds.
   `13|01` equals thirteen minutes and one seconds.
`21|12|01` equals 21 hours, 12 minutes, and 1 seconds.
Run Code Online (Sandbox Code Playgroud)

我需要在超过五分钟的任何时间进行 egrep。我正在使用以下正则表达式,但它不起作用,因为它排除了诸如13|00.

'[[:space:]0-9][[:space:]0-9][[:space:]|][[:space:]0-9][[:space:]6-9][|][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)

下面是一个例子:

 lite on       1
 lite on      01
 lite on    5|22
 lite on   23|14
 lite on 1|14|23
Run Code Online (Sandbox Code Playgroud)

Tob*_*ght 5

忽略空格(您可以稍后自己填写)和可能的前导零(同样),您希望匹配任何一个

[5-9]\|[0-9]+
[1-9][0-9]\|[0-9]+
[0-9]+\|[0-9]+\|[0-9]+
Run Code Online (Sandbox Code Playgroud)

范围内的次数

[5,10) minutes
[10,99) minutes
1+ hours
Run Code Online (Sandbox Code Playgroud)

分别。

因此,将它们加入到一个匹配组中(...|...),在开始和结束时有足够的锚定(这样您就不会匹配14|591|00|00)。

这给

grep -E 'on +([5-9]\|[0-9]+|[1-9][0-9]\|[0-9]+|[0-9]+\|[0-9]+\|[0-9]+) *$'
Run Code Online (Sandbox Code Playgroud)

我们可以稍微简化一下,因为秒对所有三个正则表达式都是通用的:

grep -E 'on +([5-9]|[1-9][0-9]|[0-9]+\|[0-9]+)\|[0-9]+ *$'
Run Code Online (Sandbox Code Playgroud)