Zeitvalidierung mit Regex

Zeitvalidierung mit Regex

Ich möchte den Zeitstempel einer meiner Protokolldateien validieren. Aber anscheinend habe ich ein Problem mit meinem Ausdruck in der Case-Anweisung.

Der TIME-Wert könnte etwa 11:49 oder 2011 sein. Und ich möchte nur prüfen, ob es sich um das Format HH:MM handelt oder nicht. Der Code ist unten.
Es wird immer das Jahresformat angezeigt, obwohl die Datei im Format HH:MM vorliegt

#!/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

Update: Ich habe „[0-2][0-9]:[0-5][0-9]“) ausprobiert, aber die Validierung schlägt immer noch fehl.

Antwort1

Das Problem besteht darin, dass Sie die ZEIT nicht mit [0-23]+ :[0-59]einem Ausdruck überprüfen können.

Hierzu gibt es mehrere Möglichkeiten:

  • So teilen Sie Ihre Variable auf und prüfen jeden Teil separat:
TIME="06:25" ; 
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
        ${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
  • Um es mit einem allgemeinen regulären Ausdruck zu prüfen, werden in einigen Fällen falsche Uhrzeiten akzeptiert (wie etwa 28:59):
"[0-2][0-9]:[0-5][0-9]")

verwandte Informationen