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" / | Найти все места, где может храниться пароль |