Страница 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
:roll:

Re: Найти совпадение "после".....

Добавлено: 2009-04-30 8:48:44
_ tango
О! Супер! Именно то что мне было нужно. :) Спасибо!
Ман до конца не дочитала... :oops: .... "А" в мане мне попалось раньше чем "Е".

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
Может косяк в том, что надо одинарные кавычки ' ' заменить на двойные " "

Код: Выделить всё

"($DATE |update.failed)"
Одинарные кавычки выключают парсинг переменных (символ $ воспринимается не как мета-символ, а как обычный)

Re: Найти совпадение "после".....

Добавлено: 2009-04-30 11:52:56
_ tango
Точно! Нашла косяк... у меня там пробел лишний после переменной и кавычки поменяла.
Все работает теперь :)
Спасибо.