2012-09-15 3 views
4

egrep로 정규 표현식과 24 시간 일치 시키려고합니다.정규 표현식으로 24 시간 형식의 시간 일치

egrep '(2[0-3]|1[0-9]|0[0-9]|[^0-9][0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])' test.txt 

결과 일치 :

여기
32:23:31 
24:30:31 
23:70:31 
23:61:31 
23:10:70 
23:10:61 
22:17:16 
01:17:15 
24:15:22 
0:17:16 
00:17:17 
24:30:31 

내 정규 표현식이다 : 여기

내 테스트 파일, TEST.TXT입니다

23:10:70 
23:10:61 
22:17:16 
01:17:15 
00:17:17 

어떤 생각이 일치하는 이유 23:10:70 및 23:10:61?

+1

정규식 끝 부분에 줄 끝 기호 (보통 $)가 필요합니다. – bdares

+0

줄에 다른 정보가있는 로그 파일을 사용하는 경우 $로 작동하지 않을 수 있으므로 '$'대신 '\>'을 사용하는 것이 좋습니다 –

답변

5

실제로 일치23:10:723:10:6,하지만 당신은 문자열의 끝에서 라인 메타 문자 $끝을 사용하지 않기 때문에, 그것은 다음과 아무것도 처리합니다. 일치하는 숫자가 행의 마지막 인 경우 즉

egrep '^(2[0-3]|1[0-9]|0[0-9]|[^0-9][0-9]):([0-5][0-9]|[0-9]):([0-5][0-9]|[0-9])$' test.txt 

만이 $ 다음 경우 즉,,, 문자열의 끝에서 [0-9]을 허용해야합니다.

또 다른 옵션은 [0-9] 대신 0[0-9]을 사용하여 마지막 자릿수가 10보다 작 으면 0으로 채워지도록하는 것입니다. 이는 23:10:07과 일치하지만 23:10:7은 일치하지 않습니다. 이미 시간 부분에 대해 가지고있는 것과 같습니다.

+0

좋은 관찰. 내 정규식 끝 부분에 [^ 0-9]을 추가하여 제대로 작동하게했습니다. 감사! – Stephen305

+0

이 부분은 시간 유효성 검사에 추가되는 내용 : | [^ 0-9] [0-9]? – Remotec

+0

이 경우 ':'옵션을 어떻게 만들 수 있습니까? – user1261710