时间戳 HH:MM:SS 的正则表达式?

时间戳 HH:MM:SS 的正则表达式?

在名为 的文件中result,包含以下内容:

<span class=timestamp><b>15:31:00</b></span>

如何 grep 获取时间戳?

以下是一些尝试及其输出:

> grep "[0..9]*:[0..9]*:[0..9]*"  result -o

> grep "[0..9]*:[0..9]*"  result -o
:
:00

> grep "[0..9]*:"  result -o
:
:

答案1

我会用

grep -o '[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' result

将结果限制为可能是时间戳的字符串 - 0 到 29 之间的小时(作为 23 的近似值,假设 24 小时而不是 12 小时 AM/PM),0 到 59 之间的分钟和秒。

引入扩展正则表达式可以让匹配更加严格:

grep -oE '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]' result

为了允许闰秒,60 应该是一个可接受的值:

grep -oE '([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)' result

(它们是在 UTC 午夜之前添加的,但上面允许其他时区)。

答案2

您可以通过下面的命令来实现相同的效果

grep -o "[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}" result

相关内容