Поиск по логам
Найти строку — половина дела. Обычно нужно ещё понять, что происходило вокруг неё и чем это кончилось.
Контекст
Три строки до и после
Одинокая строка с ошибкой почти никогда не объясняет причину. -C даёт симметричный контекст, -B и -A — только до или только после.
Показать номера строк и перейти к ним
-n печатает номер строки, дальше можно открыть файл сразу на нужном месте.
Убрать шум
Исключить несколько шаблонов сразу
Health-чеки и фавиконки забивают вывод. Каждый -e добавляет ещё один шаблон к исключению.
Шаблоны из файла
Когда исключений становится больше пяти, держите их списком. По строке на шаблон.
Только посчитать
-c выводит число совпадений вместо самих строк. Полезно, чтобы понять масштаб до того, как вываливать всё в терминал.
Скорость
Отключить регулярки
-F ищет фиксированную строку. На больших файлах разница ощутимая, плюс не нужно экранировать точки и слэши.
Остановиться после N совпадений
Если нужно просто убедиться, что явление есть, не читайте файл до конца.
ripgrep, когда файлов много
Ищет рекурсивно, параллельно и по умолчанию пропускает бинарники. Ставится как ripgrep.
Архивы и каталоги
Сжатые логи
zgrep читает gzip на лету, распаковывать не нужно. Для xz и bzip2 есть xzgrep и bzgrep.
Рекурсивно, но без бинарного мусора
-I пропускает бинарные файлы. Без него grep находит совпадение в каком-нибудь core-дампе и печатает Binary file matches, а иногда и ломает терминал.
Осторожно. Рекурсивный обход /var/log под пользователем без прав завалит вывод сообщениями об отказе в доступе. Отсюда 2>/dev/null — но при отладке его лучше убрать, чтобы видеть, куда grep не дошёл.
Диапазон времени
Вырезать промежуток
Если формат времени в начале строки лексикографически сортируем, работает sed с диапазоном шаблонов: от первого совпадения до первого совпадения со вторым.
Для ISO-8601 это работает всегда. Для формата nginx с квадратными скобками и месяцем словом — нет, там придётся идти через awk и разбор поля.