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

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

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

grep

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 — стандартный пайплайн массовой обработки файлов.

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

find — что это и зачем
Глоссарий

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

find — стандартная команда Linux для поиска файлов и каталогов по имени, типу, правам, размеру, дате и десяткам других критериев. С помощью `-exec` поверх найденного можно сразу выполнять команды. Универсальный инструмент админа для массовой работы с файловой системой.

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

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

snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.

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

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

LVM — слой абстракции между физическими дисками и файловыми системами в Linux. Объединяет диски в пулы (Volume Groups), нарезает их на логические тома (Logical Volumes) и позволяет изменять размер на лету. Альтернатива классическому partitioning, которая делает работу с дисками гибкой.

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

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

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

Редакция