При работе с файлом необходимо выполнить поиск строки с отметкой времени в формате H:MM:SS. Я попробовал следующий egrep '[0-9]:[0-9]:[0-9]'. Не работал для меня Что я делаю не так в регулярных выражениях?
3 ответа
если вы хотите соответствовать
С 00:00:00 до 23:59:59
egrep '([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]'t
если вы хотите соответствовать
С 12:00 до 00:59
egrep -i '((?:0[0-9]|1[012]):[0-5][0-9]:[0-5][0-9]\s?(?:a|p)m)'
[0-9]:[0-9]:[0-9]
будет соответствовать H:M:S, бот не H:MM:SS.
Каждый набор квадратных скобок соответствует одному символу.
Таким образом, чтобы получить что-то, что соответствует H:MM:SS, вы можете использовать:
[0-9]:[0-9][0-9]:[0-9][0-9]
Обратите внимание, что выше НЕ будет соответствовать H:M:S
Для соответствия H:MM:SS ИЛИ H:M:S ИЛИ H:M:SS ИЛИ H:MM:S используйте следующее
[0-9]:[0-9]+:[0-9]+
+
означает совпадение с последним символом, 1 или более раз (включая первое совпадение)
Я предлагаю вам использовать
egrep '[0-9]{2}:[0-9]{2}:[0-9]{2}'
где {2}
означает совпадение с последним символом как минимум два раза и максимум два раза (= ровно два раза), где последний символ в этом примере был числом от 0 до 9.
Если вы хотите найти по крайней мере один и максимум два, вы должны изменить его на
egrep '[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}'
что соответствует, например, 0:1:22
и 0:11:22
и 00:11:22
и 00:11:2
и так далее.
Ответ Sirius_Black дал также тестирование в реальном времени. Мой ответ будет соответствовать нереалистичным временам, таким как 99:99:99, что, однако, может быть продолжительностью.