在名为 的文件中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