Respostas:
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'
Explicação detalhada pode ser encontrada em vários regex (expressões regulares) tutoriais; egrep
usa a sintaxe "POSIX estendida" ( man 7 regex
).
O primeiro ^
significa "início da linha".
[^ ]+
apenas corresponde ao campo da data, independentemente da data real.
[...]
significa "qualquer caractere entre colchetes"; portanto [89]
, corresponderá a 8
ou 9
; [0-9]
é qualquer número e [^ ]
é qualquer coisa, exceto um espaço (por causa dos ^
colchetes internos).
+
significa "um ou mais dos anteriores" (por exemplo, a+
iria corresponder a
, aaa
e aaaaaaaa
).
Assim ^[^ ]+
, começará com o início da linha e corresponderá ao maior número possível de caracteres não espaciais.
(...|...|...)
significa "um dos padrões fornecidos", então (0[89]|1[0-9]|2[012])
significa "um 0[89]
ou 1[0-9]
ou 2[012]
". Ele corresponderá a todos os números de 08 a 22.
Uma opção um pouco melhor é:
awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'
A -F
opção divide todas as linhas em campos separados, de acordo com o [: ]
regex (correspondendo a um :
ou a um espaço), e o script awk verifica a 2ª coluna (a hora).
Por que se preocupar em usar grep? Você pode simplesmente usar sed.
exemplo:
sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log
Isso imprimirá todos os logs entre June 17 13:39:54
eJune 18 10:50:28
Na verdade, há uma maneira muito mais fácil de fazer isso.
Download / Documentação: autodrgrep.kl.sh
Comando:
./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show
Explicação:
autodrgrep.kl.sh é o nome da ferramenta.
notchef é uma opção que é passada para a ferramenta para dizer o que fazer. Nesse caso em particular, está dizendo à ferramenta que tipo de arquivo de log /tmp/client.log é.
/tmp/client.log é obviamente o arquivo de log.
2016-05-08_19: 12: 00,2016-05-08_21: 13: 00 é o intervalo de datas do registro que você deseja verificar
"INFO" é uma das seqüências de caracteres que estão nas linhas de logs nas quais você está interessado.
"a2ensite" é outra string na mesma linha em que você espera encontrar a string "INFO". A especificação dessas duas strings (INFO e a2ensite) isola e processa as linhas que você deseja muito mais rapidamente, principalmente se estiver lidando com um grande arquivo de log.
5 especifica Aviso. Ao especificar 5, você está dizendo ao programa para alertar como WARNING se houver pelo menos 5 ocorrências das cadeias de caracteres de pesquisa que você especificou
10 especifica Crítico. Ao especificar 10, você está dizendo ao programa para alertar como CRÍTICO se houver pelo menos 10 ocorrências das sequências de pesquisa que você especificou.
-show especifica que tipo de resposta você receberá. Ao especificar -shown, você está dizendo que, se for encontrado algo que corresponda aos padrões especificados, envie para a tela.
Exemplo de execução:
# ./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
E se o período ou período de tempo especificado pelo usuário não estiver no log?
Cada execução do comando acima sempre terá uma linha (última linha da saída) que diz "ATWFILF" ou "ETWNFILF".
ATWFILF significa que o intervalo de datas ou o horário real que você solicitou pesquisar foram encontrados no log. Então isso é muito bom.
ETWNFILF significa que o intervalo de datas ou o período real que você solicitou a pesquisa NÃO foram encontrados no log. Nesse caso, o horário mais próximo do tempo especificado será detectado e usado.
^[^ ]+
parte ..