タイムスタンプ HH:MM:SS の正規表現ですか?

タイムスタンプ HH:MM:SS の正規表現ですか?

という名前のファイルには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 の近似値として、12 時間制の AM/PM ではなく 24 時間制を想定)、分と秒は 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

関連情報