Страница 1 из 1
Найти совпадение "после".....
Добавлено: 2009-04-29 12:49:35
tango
Как можно найти заданную строку (шаблон) в логфайле ПОСЛЕ определенной строки?
Немного поясню...
Есть логфайл freshclam.log, мне нужно для нагиоса настроить проверку удачно/неудачно прошло обновление.
Для этого, как я понимаю, нужно сначала в логфайле найти строчку с сегодняшней датой (обновляется раз в сутки)
Код: Выделить всё
lan# date +%c
среда, 29 апреля 2009 г. 13:38:34
и если эта запись есть, то грепнуть файл на предмет поиска "failed update" ПОСЛЕ строки с датой....
Что-то не соображу как это сделать..

Re: Найти совпадение "после".....
Добавлено: 2009-04-29 13:05:34
zg
я бы сначала выбрал целевые записи, потом отбирал по дате
Re: Найти совпадение "после".....
Добавлено: 2009-04-29 14:39:40
_tango
man grep рулит

то что мне нужно делается так:
Код: Выделить всё
grep -i -A 15 "Wed Apr 29" /var/log/clamav/freshclam.log | grep -i "failed updated"
Re: Найти совпадение "после".....
Добавлено: 2009-04-29 16:18:09
zg
_tango писал(а):grep -i -A 15
а если это будет 16-цатая строка?
Re: Найти совпадение "после".....
Добавлено: 2009-04-29 16:45:01
_ tango
ну это я для примера привела.....
а в скрипте выставила значение с "запасом" - 50 строк
полюбому статус обновления туда попасть должен...

Re: Найти совпадение "после".....
Добавлено: 2009-04-29 18:42:02
zg
_ tango писал(а):полюбому статус обновления туда попасть должен...
Код: Выделить всё
zg# grep -Ei '(Wed Apr 22|updated)' 1.txt | grep -iA1 'Wed'
Wed Apr 22
good updated
zg# grep -Ei '(Wed Apr 23|updated)' 1.txt | grep -iA1 'Wed'
Wed Apr 23
failed updated
zg# grep -Ei '(Wed Apr 29|updated)' 1.txt | grep -iA1 'Wed'
Wed Apr 29
failed updated
zg#
Код: Выделить всё
zg# cat 1.txt
Wed Apr 22
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
good updated
Wed Apr 23
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
failed updated
Wed Apr 29
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
bla bla bla
failed updated

Re: Найти совпадение "после".....
Добавлено: 2009-04-30 8:48:44
_ tango
О! Супер! Именно то что мне было нужно.

Спасибо!
Ман до конца не дочитала...

.... "А" в мане мне попалось раньше чем "Е".
Re: Найти совпадение "после".....
Добавлено: 2009-04-30 10:24:24
tango
Блин.... что-то не выходит "каменный цветок"...

Как в регулярное выражение подставить переменную, чтобы ее grep понял?
Пример скрипта:
Код: Выделить всё
#!/bin/sh
CLAMAVFILE=/var/log/clamav/test.log
DATE=`date +%c | awk '{print $1, $2, $3}'`;
CK_DATE=`grep -i "$DATE" $CLAMAVFILE`;
STATUS=`grep -iE '($DATE |update.failed)' $CLAMAVFILE | grep -iA1 "$DATE" | grep -v "$DATE"`;
if [ "$CK_DATE" ]
then
if [ "$STATUS" ]
then
echo "Critical - Update failed!"
else
echo "OK - Database updated $DATE"
fi
else
echo "WARNING - Check last update Database!"
fi
сейчас в выражении
'($DATE |update.failed)'
команда grep переменную
$DATE не понимает
Re: Найти совпадение "после".....
Добавлено: 2009-04-30 11:39:57
terminus
Может косяк в том, что надо одинарные кавычки ' ' заменить на двойные " "
Одинарные кавычки выключают парсинг переменных (символ $ воспринимается не как мета-символ, а как обычный)
Re: Найти совпадение "после".....
Добавлено: 2009-04-30 11:52:56
_ tango
Точно! Нашла косяк... у меня там пробел лишний после переменной и кавычки поменяла.
Все работает теперь

Спасибо.