Подтвердить что ты не робот

Греп игнорирует несколько строк

Есть ли способ с Grep использовать ключ -v для игнорирования строки и следующего количества строк после нее. Его в основном для фильтрации исключений из файла журнала i.e.

Valid log entry 1
Exception exceptionname
    at a.b.c
    at d.e.f
    ...
Valid log entry 2

grep, чтобы произвести:

Valid log entry 1
Valid log entry 2

Я пробовал grep -v Exception -A 2

но это не работает.

Любые идеи будут оценены.

4b9b3361

Ответ 1

Попробуйте awk:

awk -v nlines=2 '/^Exception/ {for (i=0; i<nlines; i++) {getline}; next} 1'

Ответ 2

sed -n '/^Exception/,+2!p' filename

Ответ 3

В вашем случае вы можете указать grep также игнорировать любые строки, содержащие ведущие пробелы:

grep -v 'Exception|^\s'

Ответ 4

Улучшение на glenn jackman's, путем подачи некоторых команд вы можете получить до/после behaivour:

awk -v nlines_after=5 '/EXCEPTION/ {for (i=0; i<nlines_after; i++) {getline};print "EXCEPTION" ;next} 1' filename.txt|\
tac|\
awk -v nlines_before=1 '/EXCEPTION/ {for (i=0; i<nlines_before; i++) {getline}; next} 1'|\
tac