Короткий ответ
grep ищет строки, соответствующие шаблону (в том числе регулярному выражению), и выводит только их, что позволяет находить нужные ошибки в файле любого размера без его полной загрузки в память редактора.
Как это работает подробнее
- Как это работает:
grepпострочно читает файл (или поток) и печатает строки, совпавшие с шаблоном; флаг-iделает поиск регистронезависимым,-cсчитает число совпадений,-nдобавляет номер строки, а-Eвключает расширенные регулярные выражения.
Пример кода
search_logs.sh
grep -c 'ERROR' app.log
grep -n -i 'timeout' app.log | head -n 20Что использовать на практике
- На практике: для файла в несколько гигабайт
grep 'ERROR'работает быстрее и экономнее по памяти, чем открытие файла в Excel или текстовом редакторе; удобно комбинировать сwc -l, чтобы сначала оценить количество ошибок каждого типа, прежде чем смотреть сами строки. - Пример и проверка. Первая команда покажет общее число строк с ERROR, вторая — первые 20 строк с упоминанием таймаутов с номерами строк. Проверка: сумма количества строк по всем искомым типам ошибок (ERROR, WARNING, TIMEOUT) не должна превышать общее число строк в файле (wc -l app.log).
Подводные камни
- Частые ошибки: искать точную фразу без учёта возможных вариаций регистра («Error» вместо «error»/«ERROR») и получать неполный результат; забывать, что
grepпо умолчанию ищет подстроку, поэтому шаблон500найдёт и код ошибки500, и, например, число15000, если не ограничить шаблон границами слова (\b500\b).