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.txtless -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 “foobar” file.txt`-E
`grep -E “(catdog)” 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 auxgrep ssh`
`dmesggrep -i usb`
`historygrep 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.loggrep –line-buffered “ERROR”`
`grep -R –color=always “FIXME”less -R`

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

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

КомандаЧто делает
grep -P -n "(?<=user=)\w+" access.logPCRE: найти имя пользователя после user=
`grep -E “ERRORWARNING” 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.txtwc -l`
grep -R --exclude-dir={.git,node_modules} "password" /Найти все места, где может храниться пароль