regex para um carimbo de data/hora HH:MM:SS?

regex para um carimbo de data/hora HH:MM:SS?

Em um arquivo chamado result, contendo isto:

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

Como usar o grep para o carimbo de data/hora?

Aqui estão algumas tentativas e seus resultados:

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

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

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

Responder1

eu usaria

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

para restringir os resultados a strings que são potencialmente carimbos de data e hora - horas entre 0 e 29 (como uma aproximação para 23, assumindo 24h em vez de 12h AM/PM), minutos e segundos entre 0 e 59.

A introdução de expressões regulares estendidas permite que a correspondência seja mais rigorosa:

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

Para permitir segundos bissextos, 60 deve ser um valor aceitável:

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

(eles são adicionados pouco antes da meia-noite UTC, mas o acima permite outros fusos horários).

Responder2

Você pode logo abaixo do comando para conseguir o mesmo

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

informação relacionada