ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

grep — что это и зачем

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

Что это в одном абзаце

grep (от global regular expression print) — команда фильтрации текста. Даёшь ей шаблон и файл (или поток через пайп) — она печатает строки, в которых шаблон встретился. Это самый частый «следующий шаг» после получения вывода: что бы ни выдала команда, через | grep <что_искал> оставляешь только нужные строки.

grep "error" /var/log/syslog                  # строки со словом "error" в файле
grep -r "TODO" /opt/myapp                     # рекурсивный поиск в каталоге
ps aux | grep nginx                           # отфильтровать вывод ps по nginx
journalctl -u ssh | grep "Failed password"    # неудачные попытки входа в SSH

Шаблон — это либо точная строка, либо регулярное выражение. По умолчанию grep работает в режиме «basic regex»; для современных регулярок добавляйте -E.

Базовые флаги

  • -i — без учёта регистра (case-insensitive). grep -i "error" найдёт и Error, и ERROR.
  • -r или -R — рекурсивный поиск в каталоге. Часто комбинируется с именем каталога: grep -r "TODO" ..
  • -v — инверсия: показать строки, в которых нет совпадения. Удобно для исключения шума: grep -v '^#' config.ini уберёт комментарии.
  • -l — показать только имена файлов с совпадениями (без самих строк). Полезно для пайплайна: «дай мне все файлы, в которых упоминается X».
  • -c — показать только количество совпадений в каждом файле.
  • -n — показать номер строки рядом с каждым совпадением.
  • -A 3 / -B 3 / -C 3 — показать 3 строки после / до / вокруг совпадения. Бесценно при отладке логов.
  • -w — искать только целые слова. grep -w "in" не найдёт строки с «information» или «during».
  • -E — extended regex (поддержка +, ?, |, () без экранирования).
  • -F — fixed strings, точное совпадение без интерпретации регулярок. Быстрее, безопаснее для шаблонов с метасимволами.
  • -q — quiet, ничего не выводит, нужен только код возврата. Используется в if в bash-скриптах.

Регулярные выражения в grep

Базовые элементы:

  • . — любой один символ.
  • * — ноль или более повторений предыдущего символа.
  • ^ — начало строки.
  • $ — конец строки.
  • [abc] — любой из символов a, b, c.
  • [^abc] — любой символ, кроме a, b, c.

С флагом -E добавляются:

  • + — одно или более повторений.
  • ? — ноль или одно.
  • | — ИЛИ.
  • () — группа.

Примеры:

grep "^Host " /etc/ssh/sshd_config                    # строки, начинающиеся с "Host "
grep "[Ee]rror" app.log                               # error или Error
grep -E "(error|fatal|panic)" app.log                 # любое из трёх слов
grep -E "[0-9]{3}-[0-9]{2}" data.csv                  # номер вида 123-45
grep "^[^#]" config.ini                               # все строки кроме комментариев

Для сложных регулярок и нескольких подстановок часто берут sed или awk — они мощнее.

Грабли grep

  • Сам процесс grep попадает в результаты. Классика: ps aux | grep nginx найдёт и сам процесс grep. Решения: pgrep nginx (специально для процессов) или классический трюк ps aux | grep '[n]ginx' (квадратные скобки делают шаблон таким, чтобы он не находил сам себя).
  • grep -r идёт по симлинкам. Может зацикливаться на циклических симлинках. Используйте grep -r --no-follow, если нужно.
  • Бинарные файлы. Если шаблон находится в бинаре, grep пишет «Binary file matches» и не показывает контент. Чтобы пропустить бинари: grep -I. Чтобы обработать как текст: grep -a.
  • Цвет. На современных дистрибутивах grep подсвечивает совпадения — это --color=auto через alias. В пайпах и less цвет ломается. Решение: grep "..." log | less -R (флаг -R понимает ANSI-цвета).
  • Регулярка не та, что вы ожидали. В basic regex + и ? — это литералы, а не кванторы. Если регулярка не работает — добавьте -E.

Альтернативы grep

  • ripgrep (rg) — быстрый аналог grep -r с человеческим UX и красивым выводом. Игнорирует .gitignore по умолчанию. Установить: sudo apt install ripgrep.
  • ag (the_silver_searcher) — предшественник ripgrep, тоже быстрый. Сейчас вытесняется ripgrep-ом.
  • ack — Perl-альтернатива, заточенная под код.

В скриптах автоматизации остаётся grep — он стандартен. Для интерактивного поиска по проекту чаще берут rg.

grep в bash-скриптах

grep -q отлично работает в условиях:

if grep -q "MemTotal:" /proc/meminfo; then
    echo "Линукс с /proc"
fi

if ! grep -q "myhost" /etc/hosts; then
    echo "Запись отсутствует, добавляем..."
    echo "10.0.0.5 myhost" | sudo tee -a /etc/hosts
fi

Подробнее про условные конструкции — bash if/else.

Частые вопросы

Что такое grep в Linux

Команда поиска строк по шаблону внутри файлов или потоков. Универсальный фильтр: что бы ни вывела другая команда, | grep <шаблон> оставит только строки с совпадением. Расшифровка названия — Global Regular Expression Print.

Как искать без учёта регистра в grep

Флаг -i (insensitive). grep -i "error" log.txt найдёт строки с error, Error, ERROR — в любом регистре. Иногда удобно вместе с -w (только целые слова): grep -iw "error" не найдёт «errorless».

Как искать рекурсивно по всем файлам

grep -r "шаблон" /путь/к/каталогу. Для пропуска бинарных файлов добавьте -I. Чтобы вывести только имена файлов с совпадениями — -l. Современная альтернатива — ripgrep (rg "шаблон" /путь), он быстрее и по умолчанию уважает .gitignore.

Чем grep отличается от find

grep ищет по содержимому файла (текст внутри). find ищет по атрибутам файла (имя, тип, размер, дата). Часто используют вместе: find . -name "*.log" -exec grep -l "error" {} + — найдёт .log-файлы, в которых есть «error».

Почему grep в ps aux находит сам себя

Потому что в момент вашего поиска grep тоже работает как процесс с командной строкой grep nginx. Он попадает в вывод ps, а потом сам же находит себя. Решения: pgrep nginx (специальная команда для поиска процессов) или классический трюк grep '[n]ginx' — символ в скобках не совпадает с самим шаблоном «[n]ginx», но совпадает с «nginx».

Что значит grep -v

Инверсия: показать строки, в которых шаблон не найден. Часто используется для удаления мусора: grep -v '^#' config.ini показывает все строки кроме комментариев. Можно цеплять: cat log | grep -v 'INFO' | grep -v 'DEBUG' — оставит только не-INFO и не-DEBUG.

Что почитать

  • find — родственная команда: find ищет файлы по атрибутам, grep — содержимое внутри файлов. Часто работают в паре.
  • bash if/elsegrep -q — стандартный паттерн для условий: «если в файле есть строка X — сделать Y».
  • chmodfind ... -exec grep -l ... {} + | xargs chmod — стандартный пайплайн массовой обработки файлов.

Похожие материалы

Сроки поддержки Ubuntu LTS — на сколько хватает релиза
Глоссарий

Сроки поддержки Ubuntu LTS — на сколько хватает релиза

Ubuntu LTS — это релиз с долгой поддержкой: 5 лет бесплатных security-обновлений и 10 лет с подпиской Ubuntu Pro. Промежуточные релизы (24.10, 25.04) живут всего 9 месяцев. Разбираем, какие версии сейчас актуальны, до какой даты безопасно сидеть на 22.04 и 24.04, и когда выходит 26.04 LTS.

Редакция
Debian или Ubuntu — что выбрать
Глоссарий

Debian или Ubuntu — что выбрать

Debian и Ubuntu — две родственные операционные системы: Ubuntu сделана на базе Debian и тянет оттуда пакеты, формат `.deb` и пакетный менеджер apt. Различия — в скорости релизов, наборе из коробки и философии. Кратко: Debian Stable консервативнее и аскетичнее, Ubuntu LTS — свежее и удобнее, особенно для рабочего стола и облаков. Под прод подходят оба, выбор сводится к тому, что вам важнее: предсказуемость или новизна.

Редакция
bash — что это и зачем
Глоссарий

bash — что это и зачем

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции `if` / `for`, читает скрипты из файлов с шебангом `#!/bin/bash`. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий `/bin/sh` (`dash`).

Редакция
Ubuntu — что это и зачем
Глоссарий

Ubuntu — что это и зачем

Ubuntu — самый популярный дистрибутив Linux: бесплатная операционная система на базе Debian, удобная и для серверов, и для рабочего стола. Под капотом Linux-ядро, поверх — пакетный менеджер apt, рабочий стол GNOME (на Desktop) и стек systemd-сервисов. Релизы выходят каждые полгода, LTS-версии — раз в два года и поддерживаются 5 лет.

Редакция