답변:
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'
자세한 설명은 다양한 정규식 (일반 표현식) 자습서 에서 찾을 수 있습니다 . egrep
"POSIX 확장"구문 ( man 7 regex
)을 사용합니다.
첫 번째 ^
는 "라인의 시작"을 의미합니다.
[^ ]+
실제 날짜와 관계없이 날짜 필드와 일치합니다.
[...]
수단 "괄호 사이에 문자", 그래서 [89]
하나 일치 8
또는 9
; [0-9]
숫자이며, [^ ]
아무것도이다 제외 (때문에의 공간 ^
괄호 안에).
+
수단 "하나 또는 그 이상의 이전의"(예를 들어, a+
일치하는 것 a
, aaa
그리고 aaaaaaaa
).
따라서 ^[^ ]+
줄의 시작으로 시작하여 가능한 많은 공백이 아닌 문자와 일치시킵니다.
(...|...|...)
수단 "어느 특정 패턴"이므로 (0[89]|1[0-9]|2[012])
"어느 방법 0[89]
이나 1[0-9]
또는 2[012]
". 08에서 22까지의 모든 숫자와 일치합니다.
다소 더 나은 옵션은 다음과 같습니다.
awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'
이 -F
옵션은 [: ]
정규식 에 따라 ( :
또는 공백과 일치하는) 모든 행을 별도의 필드로 분할 하고 awk 스크립트는 두 번째 열 (시간)을 확인합니다.
왜 grep을 사용하지 않습니까? sed를 간단하게 사용할 수 있습니다.
예:
sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log
이 모든 로그를 인쇄 할 사이 June 17 13:39:54
와June 18 10:50:28
실제로이 작업을 수행하는 훨씬 쉬운 방법이 있습니다.
다운로드 / 문서 : autodrgrep.kl.sh
명령:
./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show
설명:
autodrgrep.kl.sh는 도구 이름입니다.
notchef는 도구에 전달되어 수행 할 작업을 알려주는 옵션입니다. 이 특정 경우, 도구는 /tmp/client.log 유형의 로그 파일을 알려줍니다.
/tmp/client.log는 물론 로그 파일입니다.
2016-05-08_19 : 12 : 00,2016-05-08_21 : 13 : 00은 로그에서 검색하려는 날짜 범위입니다.
"INFO"는 관심있는 로그 줄에있는 문자열 중 하나입니다.
"a2ensite"는 "INFO"문자열을 찾을 것으로 예상되는 같은 줄의 다른 문자열입니다. 이 두 문자열 (INFO 및 a2ensite)을 지정하면 특히 큰 로그 파일을 처리하는 경우 원하는 행을 훨씬 빠르게 분리하여 처리합니다.
5는 경고를 지정합니다. 5를 지정하면 지정한 검색 문자열이 5 회 이상 있으면 프로그램에 경고 메시지가 표시됩니다.
10은 위험을 지정합니다. 10을 지정하면 지정한 검색 문자열이 10 번 이상 있으면 프로그램에 CRITICAL로 경고합니다.
-show는 어떤 유형의 응답을받을 것인지 지정합니다. -shown을 지정하면 지정된 패턴과 일치하는 것이 있으면 화면에 출력됩니다.
샘플 실행 :
# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show
[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM
사용자가 지정한 날짜 범위 또는 시간 프레임이 로그에 없으면 어떻게합니까?
위 명령을 실행할 때마다 항상 "ATWFILF"또는 "ETWNFILF"라고하는 줄 (출력의 마지막 줄)이 있습니다.
ATWFILF는 검색을 요청한 실제 날짜 범위 또는 시간 프레임이 로그에서 발견되었음을 의미합니다. 그래서 이것은 매우 좋습니다.
ETWNFILF는 검색을 요청한 실제 날짜 범위 또는 시간 프레임이 로그에 없음을 의미합니다. 이 경우 지정한 시간에 가장 가까운 시간이 감지되어 대신 사용됩니다.
^[^ ]+
부분을 얻지