Глиф Учебники

Как найти текст в файлах: grep -r

Справочник · Командная строка Linux · 1 минута чтения

Найти слово listen во всех файлах папки /etc/nginx и вложенных папок:

Bash
grep -rn "listen" /etc/nginx/

-r — искать во всей папке, -n — показывать номера строк. Каждая находка печатается как файл:номер строки:строка.

Частые варианты

Bash
grep -rni "error" /var/log/myapp/
grep -rl "DB_PASSWORD" ~/projects/
grep -rn --include="*.php" "mysqli_connect" /var/www/
grep -rn --exclude-dir=node_modules --exclude-dir=.git "TODO" .
grep -rnw "main" src/
grep -rnF '$_GET[' /var/www/
КлючЧто делает
-iбез учёта регистра
-lтолько имена файлов, где есть совпадение
--include="*.php"искать только в файлах с подходящим именем
--exclude-dir=имяпропустить папку (её можно указать несколько раз)
-wтолько целое слово: main не найдётся в domain
-Fискать текст как есть, без особого смысла у ., *, [ и других знаков
-Iпропускать двоичные файлы (программы, картинки)
-cсколько строк совпало в каждом файле

Подводные камни

Если файлов очень много

Для больших проектов есть более быстрая программа ripgrep (команда rg, пакет ripgrep). Она по умолчанию ищет во всех вложенных папках и сама пропускает то, что перечислено в .gitignore:

Bash
rg -n "TODO" ~/projects/

Найти не текст, а файл по имени — в справке Как найти файл по имени в Linux.