expresión regular para una marca de tiempo HH:MM:SS?

expresión regular para una marca de tiempo HH:MM:SS?

En un archivo llamado result, que contiene esto:

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

¿Cómo buscar la marca de tiempo?

Aquí hay algunos intentos y su resultado:

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

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

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

Respuesta1

yo usaría

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

para restringir los resultados a cadenas que son potencialmente marcas de tiempo: horas entre 0 y 29 (como una aproximación para 23, asumiendo 24 h en lugar de 12 h AM/PM), minutos y segundos entre 0 y 59.

La introducción de expresiones regulares extendidas permite que la coincidencia sea más estricta:

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

Para permitir segundos intercalares, 60 debería ser un valor aceptable:

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

(Se agregan justo antes de la medianoche UTC, pero lo anterior permite otras zonas horarias).

Respuesta2

Puedes justo debajo del comando para lograr lo mismo.

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

información relacionada