grep ищет строки по шаблону в файлах или потоке данных. ripgrep — ультрабыстрая замена grep. Быстрее в 10-50 раз.

Топ-20 самых полезных флагов grep#

Флаг Назначение
-i Игнорировать регистр
-n Показать номера строк
-c Подсчитать количество совпадений
-v Инвертировать поиск (выводить несовпадающие строки)
-w Искать только целые слова
-x Совпадение всей строки
-o Показать только совпавшую часть
-l Показать только имена файлов с совпадениями
-L Показать файлы без совпадений
-H Показать имя файла перед каждой строкой
-e Несколько шаблонов поиска
-E Расширенные регулярки (аналог egrep)
-P Поддержка Perl-совместимых регулярных выражений
-C N Контекст поиска: N строк вокруг
-A N Показать N строк после совпадения
-B N Показать N строк перед совпадением
-R Рекурсивный поиск
--include Искать только в указанных файлах
--exclude Исключить файлы из поиска
--exclude-dir Исключить директории из поиска

Уровень 1 — Базовые команды (разогрев) 🟢#

Команда Флаг(и) Что делает
grep "hello" file.txt (нет) Найти слово hello в файле file.txt
grep "foo" *.txt (нет) Найти foo во всех .txt файлах
grep -i "hello" file.txt -i Игнорировать регистр букв
grep -n "bar" file.txt -n Показать номер строки
grep -c "error" file.txt -c Показать количество найденных совпадений
grep -v "ok" file.txt -v Вывести всё, кроме строк с “ok”
grep "" file.txt (нет) Вывести все строки (аналог cat)

Уровень 2 — Расширенные возможности 🟡#

Больше контроля, сортировка и фильтрация.

Команда Флаг(и) Что делает
grep -w "foo" file.txt -w Ищет только целые слова, а не подстроки
grep -x "hello world" file.txt -x Ищет точное совпадение строки
grep -l "main()" *.c -l Показать только имена файлов с совпадениями
grep -L "main()" *.c -L Показать только файлы без совпадений
grep -H "TODO" *.c -H Показать имя файла перед каждой найденной строкой
grep -o "foo" file.txt -o Вывести только совпавшую часть строки
grep -e "foo" -e "bar" file.txt -e Искать несколько шаблонов одновременно

Уровень 3 — Цвет и контекст 🟠#

Красивый вывод + просмотр соседних строк.

Команда Флаг(и) Что делает
grep --color=auto "error" file.txt --color Подсветка совпадений
grep -C 3 "error" file.txt -C Показать 3 строки контекста вокруг совпадения
grep -B 2 "error" file.txt -B Показать 2 строки перед совпадением
grep -A 4 "error" file.txt -A Показать 4 строки после совпадения
`grep –color=always “TODO” file.txt less -R` Цветной вывод через less

Уровень 4 — Регулярные выражения 🔵#

Самая мощная часть grep — поддержка regex.

Команда Флаг(и) Что делает
grep "^hello" file.txt ^ Найти строки, начинающиеся с hello
grep "world$" file.txt $ Найти строки, оканчивающиеся на world
grep "[0-9]" file.txt [] Найти строки, содержащие цифры
grep "[A-Za-z]" file.txt [] Найти строки с латинскими буквами
`grep -E “foo bar” file.txt` -E
`grep -E “(cat dog)” file.txt` -E
grep -E "[0-9]{3}" file.txt -E Найти последовательность из 3 цифр
grep -P "\d{2,4}" file.txt -P Использовать PCRE-регулярки (как в Perl)

Уровень 5 — Сочетания с другими командами 🟣#

Комбинируем grep с find, xargs, sort и awk.

Команда Что делает
find . -type f -name "*.log" -exec grep -H "ERROR" {} \; Найти ERROR во всех логах
grep -r "main()" src/ Рекурсивный поиск по папке src/
grep -R --include="*.c" "printf" src/ Искать только в .c файлах
grep -R --exclude-dir=".git" "TODO" . Искать во всех файлах, кроме .git
`ps aux grep ssh`
`dmesg grep -i usb`
`history grep ssh`

Уровень 6 — Абсолютное безумие 🔴#

Оптимизация, многопоточность, поиск по бинарникам.

Команда Что делает
grep -R "TODO" /etc/ 2>/dev/null Скрыть ошибки доступа при рекурсивном поиске
grep --binary-files=text "magic" core.dump Поиск текста внутри бинарных файлов
grep -Z "foo" file.txt Вывод с нулевыми разделителями, полезно для xargs -0
grep -r --exclude="*.min.js" "function" Исключить минифицированные JS-файлы
grep -r --exclude-dir={node_modules,dist} "API_KEY" Исключить целые папки
grep --line-buffered "pattern" Полезно для живого мониторинга логов
`tail -f app.log grep –line-buffered “ERROR”`
`grep -R –color=always “FIXME” less -R`

Уровень 7 — Гуру-режим 🟤#

Сложные приёмы, ускорение и продвинутое использование.

Команда Что делает
grep -P -n "(?<=user=)\w+" access.log PCRE: найти имя пользователя после user=
`grep -E “ERROR WARNING” server.log`
grep -E -o "https?://[a-zA-Z0-9./_-]*" file.txt Вытянуть все ссылки из файла
grep -r --include="*.{c,h}" "malloc" src/ Искать только в .c и .h файлах
grep -r --exclude-dir=".git" --include="*.py" "def " Искать все функции в .py файлах
`grep –color=always -n “.*” less -R`
`grep -E “^$” file.txt wc -l`
grep -R --exclude-dir={.git,node_modules} "password" / Найти все места, где может храниться пароль