grep: команда для поиска текста в Linux

Что такое grep и для чего он нужен
grep — утилита Unix и Linux для поиска строк, соответствующих регулярному выражению, в текстовых файлах или потоке ввода. Название пришло из команды текстового редактора ed: g/re/p — globally search for a regular expression and print.
Утилиту создал Кен Томпсон для ранних версий Unix. grep входит в стандарт POSIX.1 как обязательная утилита и по умолчанию доступен в любом дистрибутиве Linux и в macOS.
Базовый синтаксис
Общая форма вызова: grep [OPTION]... PATTERNS [FILE].... Без указания файла grep читает стандартный ввод (stdin), что позволяет встраивать его в конвейеры (pipe): вывод одной команды передаётся на вход grep.
Код возврата удобен в скриптах:
| Код | Значение |
| 0 | совпадения найдены |
| 1 | совпадений нет |
| 2 | ошибка (например, неверный синтаксис шаблона или недоступный файл) |
Типы регулярных выражений
grep поддерживает три типа регулярных выражений:
- BRE (Basic Regular Expressions) — режим по умолчанию;
- ERE (Extended Regular Expressions) — флаг -E;
- PCRE (Perl Compatible Regular Expressions) — флаг -P.
Четвёртый режим — фиксированные строки (флаг -F): шаблон сопоставляется буквально, метасимволы не интерпретируются.
Способ сравнения
- -i — игнорировать регистр;
- -v — инвертировать совпадение (вывести строки, НЕ содержащие шаблон);
- -c — показать только количество совпавших строк;
- -n — добавить номера строк к результатам.
Область поиска
- -r / -R — рекурсивный обход каталога и подкаталогов; -R дополнительно следует по символическим ссылкам;
- -l — вывести только имена файлов с совпадениями;
- -L — вывести только имена файлов без совпадений;
- --include / --exclude — фильтровать файлы по маске имени при рекурсивном поиске.
Точность совпадения и контекст
- -w — совпадение только по целым словам;
- -x — совпадение должно занимать всю строку;
- -o — вывести только совпавший фрагмент, а не строку целиком;
- -A NUM, -B NUM, -C NUM — показать NUM строк после, до и вокруг совпадения соответственно.
Практические примеры
Поиск слова в файле:
grep 'ошибка' log.txt
Поиск без учёта регистра:
grep -i 'error' log.txt
Рекурсивный поиск по проекту с номерами строк:
grep -rn 'TODO' ./src
Подсчёт вхождений:
grep -c '404' access.log
Фильтрация вывода другой команды через конвейер:
ps aux | grep nginx
ERE для сложных шаблонов (проверка формата телефона):
grep -E '^[0-9]{3}-[0-9]{4}$' phones.txt
Инверсия: убрать комментарии из конфигурационного файла:
grep -v '^#' config.conf
Родственные утилиты и отличия
egrep и fgrep — устаревшие обёртки, эквивалентные grep -E и grep -F. В старых скриптах они ещё встречаются, но в новом коде лучше использовать явные флаги.
ripgrep (rg) — быстрая альтернатива grep, которая автоматически пропускает файлы из .gitignore при поиске по репозиторию.
find и grep решают разные задачи: find ищет файлы по именам и атрибутам, grep — по содержимому файлов.
Спецсимволы в BRE и ERE
В базовых регулярных выражениях + и ? — обычные символы; чтобы они работали как квантификаторы, их нужно экранировать обратным слэшем (+, ?). В ERE экранирование не требуется.
Шаблон, начинающийся с дефиса
grep может принять его за флаг. Решение: поставить -- перед шаблоном или использовать -e.
Работа с большими файлами
--color=auto подсветит совпадения, а -m NUM ограничит число выведенных строк — оба флага экономят время при отладке.
Оставьте заявку, чтобы получить консультацию
Наши специалисты свяжутся с вами в ближайшее время и ответят на все вопросы.
Узнавайте о выходе новых статей в блоге первыми!
Будем держать в курсе новостей и облачных трендов


