egrep 以 H:MM:SS 格式显示时间

egrep 以 H:MM:SS 格式显示时间

处理文件时需要 grep 带有 H:MM:SS 格式时间戳的行。我尝试了以下 egrep '[0-9]:[0-9]:[0-9]'。对我不起作用。我在正则表达式中做错了什么?

答案1

如果你想匹配
00:00:00 到 23:59:59

egrep '([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]'t

如果你想匹配
下午 12:00 到上午 12:59 的时间

egrep -i '((?:0[0-9]|1[012]):[0-5][0-9]:[0-5][0-9]\s?(?:a|p)m)'

答案2

[0-9]:[0-9]:[0-9]将匹配 H:M:S,但不匹配 H:MM:SS。

每组方括号匹配一个字符。

因此,为了获得与 H:MM:SS 匹配的内容,您可以使用:

[0-9]:[0-9][0-9]:[0-9][0-9]

注意,以上内容不会匹配 H:M:S

为了匹配 H:MM:SS 或 H:M:S 或 H:M:SS 或 H:MM:S,请使用以下命令

[0-9]:[0-9]+:[0-9]+

+表示匹配最后一个字符 1 次或多次(包括第一次匹配)

答案3

我建议你使用

egrep '[0-9]{2}:[0-9]{2}:[0-9]{2}'

表示{2}匹配最后一个字符至少两次,最多两次(= 正好两次),其中此示例中的最后一个字符是 0 到 9 之间的数字。

如果你想搜索至少一个和最多两个,你必须将其更改为

egrep '[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}'

例如与0:1:220:11:2200:11:2200:11:2等等匹配。

Sirius_Black 给出的答案也是在实际时间上进行测试。我的答案会匹配不切实际的时间,如 99:99:99 – 但这可能是一个时间长度。

相关内容