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)
忽略空格(您可以稍后自己填写)和可能的前导零(同样),您希望匹配任何一个
[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|59
或1|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)