Validación de tiempo con expresiones regulares.

Validación de tiempo con expresiones regulares.

Me gustaría validar la marca de tiempo de uno de mis archivos de registro. Pero parece que tengo un problema con mi expresión en la declaración del caso.

El valor de HORA podría ser algo así como 11:49 o 2011. Y solo quiero comprobar si tiene formato HH:MM o no. El código está a continuación.
Siempre dice formato de año aunque el archivo está en formato 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

Actualización: probé "[0-2][0-9]:[0-5][0-9]") pero la validación aún falla.

Respuesta1

El problema es que no puedes verificar el TIEMPO con [0-23]+ :[0-59]expresión.

Hay varias formas de hacerlo:

  • Para dividir su variable y verificar cada parte por separado:
TIME="06:25" ; 
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
        ${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
  • Para verificarlo con expresiones regulares comunes, pero aceptará algunos casos de hora incorrecta (como 28:59):
"[0-2][0-9]:[0-5][0-9]")

información relacionada