2013-03-13 4 views
0

나는이 방법을 해결할 수 있는지 모른다는 것을 모르는 문제를 다루고 있습니다. 당신이 나를 도울 수 있기를 바랍니다.단어가 포함 된 X 문자열에 일치하는 정규 표현식?

일부 로그 파일을 모니터하기 위해 Monit을 사용하고 있습니다. 그것은 특정 표현을 찾는 것이지만 그 표현이 3 번 이상이라면 긍정적 인 매치만을 원합니다.

[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] Configurator :: FillSensor() 
[2013/03/12-16:07:06] [SEVERE]  :: Exception was caught: Could not bind to port.. Exiting. 
[2013/03/12-16:07:06] Configurator :: FillSensor() 

그리고 나는 "[SEVERE]"표현을 찾고 있어요 : 문제

로그 파일은 다음과 같습니다.

해당 표현식이 3 번 이상 나타나는 경우 일치를 원합니다.

나는 .*\[SEVERE\].*이 그 표현과 일치하는 모든 줄을 제공한다는 것을 알고 있지만 그 줄 수가 3 개 이상인 경우에만 일치시키기를 원합니다. 정규 표현식으로 그것을 수행하는 방법이 있습니까? 아니면 Monit과 함께하는 대안인가?

+1

로그 파일의 각 행을 개별적으로 읽은 다음 일치 항목이 3 개일 경우 전체 파일을 일치 항목으로 반환합니다. – Michael

+1

또 다른 방법은'grep'을 사용하여 줄을 찾아낸 다음'wc'를 사용하여 줄에 매치되는 줄을 계산하는 것입니다. – nhahtdh

+0

불행히도 이러한 옵션은 Monit의 범위를 넘어 섰다고 나는 잘못 생각합니까? – catteneo

답변

2

당신은 할 수 쉘에서 로그 파일을 액세스 할 수있는 경우 : "[SEVERE]"다음 wc 카운트를 포함하는 행을위한 라인과의 수를 검색 grep

[ $(cat LOG.txt | grep "\[SEVERE\]" | wc -l) -ge 3 ] 

이 파이프 파일의 내용 expression은 행 수가 3보다 크거나 같으면 0을 반환합니다.

+0

그래,이 작업을 수행하는 가장 좋은 방법은 해결책과 같은 것으로 Monit 외부에있는 것 같습니다. 감사 – catteneo