Ответы:
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 скрипт проверяет 2 - й столбец (час).
Зачем использовать 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 появлений указанных вами строк поиска.
-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 означает, что фактический диапазон дат или период времени, который вы запросили, не был найден в журнале. В этом случае самое близкое время к указанному вами времени будет обнаружено и использовано вместо этого.
^[^ ]+
роль ..