Теперь, когда ваш формат данных установлен, ответ становится намного проще: grep
был построен для этого .
Использовать как grep '
Где
- SearchWORD1
или SearchW1 \ | SearchW2
ответ ниже был написан, когда я и @murphy все еще имели неправильные предположения о формате данных:
Вот однострочная программа awk, которая ищет только ERROR :
awk '/ ERROR / { a = 1; печать} / ^ / || / ^ \ t / {if (a) print; next}! / ERROR / {a = 0} '
Вы можете превратить это в гибкую оболочку-функцию с параметром:
searchlog(){ awk -f <( echo "
/$1/{a=1;print}
/^ /||/^\t/{if (a) print;next}
! /$1/{a=0}
"); }
Запустите ее как LogData_generated_by_program | searchlog
или searchlog
Для примера формата данных, «угадаемого» другим респондентом, это приводит к:
$ searchlog ERROR < /tmp/exampleData
[09:44:22] [main] ERROR [url/location] - A ONE LINE ERROR
[09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR
with whitepace indention
[09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR
with tab indention