Вики / Базовые команды
grep (поиск по тексту)
Поиск строк по шаблону; регулярки, рекурсия, контекст.
grep ищет строки, подходящие под шаблон (регулярное выражение, см. regex).
Работает с файлами и со stdin (в конвейере).
grep "error" app.log # строки со словом error
journalctl -u nginx | grep 502 # фильтр в конвейере
grep -r "TODO" src/ # рекурсивно по каталогу
| Флаг | Смысл |
|---|---|
-i |
без учёта регистра |
-r / -R |
рекурсивно по каталогам (R — идти по симлинкам) |
-n |
показать номера строк |
-v |
инвертировать (строки БЕЗ шаблона) |
-c |
посчитать совпадения |
-l / -L |
только имена файлов с совпадением / без |
-w / -x |
слово целиком / строка целиком |
-E / -F / -P |
extended regex / фикс. строка / Perl-regex |
-A N/-B N/-C N |
N строк после / до / вокруг |
-o |
только совпавшую часть |
--include/--exclude |
фильтр имён файлов при -r |
grep -rni "timeout" /etc # рекурсивно, без регистра, с номерами
grep -E "warn|error|fatal" app.log # альтернатива (ИЛИ)
grep -A3 -B1 "panic" app.log # контекст вокруг
grep -c "GET" access.log # сколько GET-запросов
grep -rl "api_key" . # в каких файлах встречается
grep -rn --include='*.py' "def main" . # только .py
grep -rn --exclude-dir={.git,node_modules} "TODO" .
grep -oP '\d+\.\d+\.\d+\.\d+' access.log | sort | uniq -c | sort -rn # топ IP (-P, -o)
grep -Ff patterns.txt data.txt # искать любую из строк файла patterns.txt
ps aux | grep -v grep | grep nginx
grep сам попадает в вывод ps aux | grep
Классика. Исключи себя: grep -v grep, либо pgrep, либо трюк grep "[n]ginx".
Спецсимволы шаблона ловятся как регулярка
Точка, скобки, + — это regex. Экранируй или grep -F (фиксированная строка):
grep -F "1.2.3.4".
\d, \w, lookahead не работают
Базовый/extended grep их не знает — нужен -P (PCRE): grep -P '\d{3}'.
Хочу совпадения, но grep молчит
Проверь регистр (-i), нужный файл, что данные реально приходят. Бинарные файлы grep
может пропускать — -a (как текст).
Слишком медленно по большому дереву
Исключай каталоги (--exclude-dir), или используй ripgrep (rg) — заметно быстрее.
grep -i word file # без регистра
grep -rn word dir/ # рекурсивно + номера строк
grep -v word file # без слова
grep -C2 word file # контекст ±2 строки
grep -rn --include='*.conf' word /etc
grep -oP 'regex' file # только совпадение, Perl-regex
cmd | grep -F "literal" # точная строка
См. также
- Базовые команды с файлами — Базовые команды
- find (поиск файлов) — Базовые команды
- sed и awk (обработка текста) — Базовые команды