Regex für einen Zeitstempel HH:MM:SS?

Regex für einen Zeitstempel HH:MM:SS?

In einer Datei namens result, die Folgendes enthält:

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

Wie sucht man nach dem Zeitstempel?

Hier sind einige Versuche und ihre Ergebnisse:

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

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

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

Antwort1

ich würde ... benutzen

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

um die Ergebnisse auf Zeichenfolgen zu beschränken, bei denen es sich möglicherweise um Zeitstempel handelt – Stunden zwischen 0 und 29 (als Näherungswert für 23, wobei 24 Stunden statt 12 Stunden AM/PM angenommen werden), Minuten und Sekunden zwischen 0 und 59.

Durch die Einführung erweiterter regulärer Ausdrücke kann die Übereinstimmung strenger sein:

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

Um Schaltsekunden zu berücksichtigen, sollte 60 ein akzeptabler Wert sein:

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

(sie werden kurz vor Mitternacht UTC hinzugefügt, das Obige berücksichtigt jedoch auch andere Zeitzonen).

Antwort2

Sie können einfach den folgenden Befehl verwenden, um dasselbe zu erreichen

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

verwandte Informationen