Відповіді:
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'
Докладне пояснення можна знайти в різних регулярних виразів (регулярний вираз) навчальні посібники; egrep
використовує синтаксис "POSIX Extended" ( 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 випадків вказаних вами рядків пошуку.
-how показує, який тип відповіді ви отримаєте. Вказуючи -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 означає, що фактичний діапазон дат або часовий проміжок, який ви просили шукати, НЕ знайдено в журналі. У цьому випадку буде визначений і використаний найближчий час до вказаного вами часу.
^[^ ]+
частину ..