Проверка времени с помощью регулярного выражения

Я хотел бы сделать валидацию о отметке времени одного из моих файлов журнала. Но, похоже, у меня проблема с выражением в выражении case.

Значение TIME может быть примерно как 11:49 или 2011. И я просто хочу проверить, является ли он форматом HH: MM или нет. Код находится ниже.
Он всегда говорит, что формат yearthith в формате HH: MM

#!/usr/bin/ksh TIME=`ls -lrth /var/log/*.log | grep -i upg | tail -1 | awk '{print $8}'` echo "$TIME" validation=false if [[ $TIME != "" ]] then case TIME in "[0-23]+ :[0-59]") validation=true break;; *) echo "Year format";; esac fi echo "$validation 

Обновление: я попытался «[0-2] [0-9]: [0-5] [0-9]»), но проверка еще не завершилась.

Проблема в том, что вы не можете проверять TIME с помощью выражения [0-23]+ :[0-59] .

Существует несколько способов сделать это:

  • Чтобы разделить переменную и проверить каждую часть отдельно:
 TIME="06:25" ; [[ $TIME != "" ]] && \ [ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \ ${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok 
  • Чтобы проверить это с общим регулярным выражением, но он примет некоторые случаи неправильного времени (например, 28:59):
 "[0-2][0-9]:[0-5][0-9]")