grep java логов

Дано: лог ошибок java со стектрейсами. Для примера указал две, их может быть гораздо больше и они могут повторятся.

ERROR:Exception in thread "main" java.lang.NullPointerException 
   at com.example.myproject.Book.getTitle(Book.java:16)
   at com.example.myproject.Author.getBookTitles(Author.java:25)
   at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

ERROR:Exception in thread "main" java.lang.IllegalStateException: A book has a null property
   at com.example.myproject.Author.getBookIds(Author.java:38)
   at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
   Caused by: java.lang.NullPointerException
   at com.example.myproject.Book.getId(Book.java:22)
   at com.example.myproject.Author.getBookIds(Author.java:35)
   ... 1 more

Если греповать логи на ошибки, мне достаточно вывести первую строку. grep -i 'ERROR' /путь В результате получу: введите сюда описание изображения

Но если ошибок много и они повторяются, хочется их исключить из вывода. Пытался с бубном с двумя условиями, например grep -i 'ERROR' | grep -v 'A book has a null property' /путь Получаю: введите сюда описание изображения

То есть он мне вывел полностью ошибку NPE со стеком (так меня устраивает), но во втором условии просто убрал первую строчку, а стектрейс после неё остался ( мне то его и убрать нужно еще )

Пытался с опциями -B , для удаления последующих строк после ошибки, не получается, допускаю синтаксические ошибки со своей стороны.

Вообще мне кажется, что с грепом так не сделать ( и нужно искать бубны в sed?


Ответы (1 шт):

Автор решения: Roman Konoval

Чтобы отфильтровать результат первой команды нужно делать чуть иначе.

Допустим первая команда:

grep -i 'ERROR' /путь

Чтоб отфильтровать результат нужно добавить pipe и команду после первой команды:

grep -i 'ERROR' /путь | grep -v 'A book has a null property'
→ Ссылка