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

yO_*_*yO_ 2 grep date regular-expression

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

<span class=timestamp><b>15:31:00</b></span>
Run Code Online (Sandbox Code Playgroud)

如何grep时间戳?

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

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

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

> grep "[0..9]*:"  result -o
:
:
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 5

我会用

grep -o '[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' result
Run Code Online (Sandbox Code Playgroud)

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

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

grep -oE '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]' result
Run Code Online (Sandbox Code Playgroud)

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

grep -oE '([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)' result
Run Code Online (Sandbox Code Playgroud)

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