Validação de tempo com regex

2

Gostaria de validar o carimbo de hora de um dos meus arquivos de log. Mas parece que tenho problema em minha expressão na afirmação de caso.

O valor TIME pode ser algo como 11:49 ou 2011. E eu só quero verificar se é o formato HH: MM ou não. Código está abaixo.
Está sempre a dizer que o formato do ano, embora o ficheiro esteja no 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

Atualização: tentei "[0-2] [0-9]: [0-5] [0-9]"), mas a validação ainda retorna com falha.

    
por mibzer 18.07.2012 / 13:52

1 resposta

2

O problema é que você não pode verificar TIME com a expressão [0-23]+ :[0-59] .

Existem várias maneiras de fazer isso:

  • Para dividir sua variável e verificar cada parte separadamente:
TIME="06:25" ; 
[[ $TIME != "" ]] && \
[ ${TIME%:*} -le 23 -a ${TIME%:*} -ge 0 -a \
        ${TIME#*:} -le 59 -a ${TIME#*:} -ge 0 ] && echo ok
  • Para verificar com regex comum, mas aceitará alguns casos de hora errada (como 28:59):
"[0-2][0-9]:[0-5][0-9]")
    
por 18.07.2012 / 14:13