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 шт):
Чтобы отфильтровать результат первой команды нужно делать чуть иначе.
Допустим первая команда:
grep -i 'ERROR' /путь
Чтоб отфильтровать результат нужно добавить pipe и команду после первой команды:
grep -i 'ERROR' /путь | grep -v 'A book has a null property'