정규식을 사용한 시간 검증

정규식을 사용한 시간 검증

내 로그 파일 중 하나의 타임스탬프를 확인하고 싶습니다. 그런데 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

문제는 표현식으로 TIME을 확인할 수 없다는 것입니다 [0-23]+ :[0-59].

이를 수행하는 방법에는 여러 가지가 있습니다.

  • 변수를 분할하고 각 부분을 개별적으로 확인하려면 다음을 수행하세요.
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]")

관련 정보