Задать вопрос
Di9
@Di9

Как выполнить многостроковый поиск на bash с использованием сложного регулярного выражения?

Анализирую лог файл, в котором есть строки вида ERROR: ... но для корректного анализа требуется получить и команду которая привела к ошибке, которая находится в одной или более строках выше файла. Составил регулярку которая отрабатывается в редакторе как мне надо xxx.*(/n(?!xxx).*)*ERROR:.*

В логе:

xxx...
xxx...
xxx...
yyy...
ERROR...
xxx...
xxx...


отделяет только нужые мне 3 строки:

xxx...
yyy...
ERROR...


далее использую команду
grep 'xxx.*(/n(?!xxx).*)*ERROR:.*' log.txt

но проблема заключается в том что на bash уже не получается выдернуть 3 строки. Видимо потому-что я использую grep который обрабатывает одиночные строки? Есть ли альтернативное решение?.
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
У команды grep есть еще три опции:
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing a group
separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.

-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.

-C NUM, -NUM, --context=NUM
Print NUM lines of output context. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.


Которые позволяют выводить окружающий строку контекст
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Скорее всего, ты пытаешься решить задачу не с той стороны. Надо не ERROR искать, а потом восстанавливать строку, а сначала составлять каждую отдельную строку и потом, если там есть ERROR, выводить её.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы