Командная строка: Как найти все вхождения текста «error» в логах за текущий день и вывести количество найденных строк?
Для поиска всех вхождений текста «error» в лог-файлах за текущий день и подсчёта найденных строк в командной строке Linux/Unix существует несколько подходов.
**Базовый способ с grep:**
Самый простой вариант — использовать grep с флагом -c, который сразу возвращает количество совпадений:
grep -ic ‘error’ /var/log/syslog
Флаг -i делает поиск регистронезависимым (найдёт ERROR, Error, error), флаг -c выводит только количество строк.
**Фильтрация по текущей дате:**
Чтобы ограничить поиск только записями за сегодня, нужно добавить фильтр по дате. Текущую дату можно получить командой `date`:
grep «$(date ‘+%Y-%m-%d’)» /var/log/app.log | grep -ic ‘error’
Если формат даты в логах другой (например, «Jan 15»), используйте:
grep «$(date ‘+%b %e’)» /var/log/syslog | grep -ic ‘error’
**Использование awk для гибкой фильтрации:**
awk -v date=»$(date ‘+%Y-%m-%d’)» ‘$0 ~ date && tolower($0) ~ /error/ {count++} END {print count}’ /var/log/app.log
Эта команда одновременно фильтрует по дате и ищет error, выводя итоговое число.
**Поиск по нескольким файлам:**
Если логи разбиты по файлам (например, ротация), можно использовать:
find /var/log -name ‘*.log’ -newer /var/log/lastrun | xargs grep -ic ‘error’ 2>/dev/null
**Вывод строк и их количества одновременно:**
Чтобы и увидеть сами строки, и получить итоговое число:
grep -i ‘error’ /var/log/app.log | grep «$(date ‘+%Y-%m-%d’)» | tee /dev/stderr | wc -l
Или через tee и wc:
grep -i ‘error’ /var/log/app.log | grep «$(date ‘+%Y-%m-%d’)» > /tmp/errors_today.txt && wc -l /tmp/errors_today.txt
**Однострочник для быстрого результата:**
DATE=$(date ‘+%Y-%m-%d’); grep -i ‘error’ /var/log/app.log | grep «$DATE» | wc -l
**Советы:**
— Используйте `grep -r` для рекурсивного поиска по директории с логами.
— Флаг `—include=’*.log’` ограничит поиск только лог-файлами.
— Для больших файлов `ripgrep (rg)` работает значительно быстрее стандартного grep.
— Если логи в формате JSON, рассмотрите использование `jq` для более точной фильтрации.
Выбор конкретного метода зависит от формата ваших лог-файлов и требуемой точности фильтрации по дате.
