使用正则表达式进行时间验证

使用正则表达式进行时间验证

我想对我的日志文件之一的时间戳进行验证。但我在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。

有几种方法可以做到这一点:

  • 要拆分变量并分别检查每个部分:
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]")

相关内容