В файле с именем 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
(они добавляются непосредственно перед полуночью по всемирному координированному времени, но указанное выше допускает и другие часовые пояса).
решение2
Вы можете просто выполнить команду ниже, чтобы добиться того же самого
grep -o "[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}" result