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

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

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

Значение TIME может быть чем-то вроде 11:49 или 2011. И я просто хочу проверить, является ли это форматом HH:MM или нет. Код ниже.
Он всегда говорит формат года, хотя файл в формате 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]»), но проверка все равно не прошла.

решение1

Проблема в том, что вы не можете проверить ВРЕМЯ с помощью [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]")

Связанный контент