Командная строка: Как найти все вхождения текста «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` для более точной фильтрации.

Выбор конкретного метода зависит от формата ваших лог-файлов и требуемой точности фильтрации по дате.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.