正規表現を使用した時間検証

正規表現を使用した時間検証

私のログファイルの1つのタイムスタンプを検証したいと思います。ところが事件陳述書に出てくる表現に問題があるようです。

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]")

関連情報