Поиск текста в файлах — grep, findstr и Select-String
См. также
- Linux — шпаргалка
- Windows — шпаргалка
- конвейер
| - RegEx — синтаксис
- RegEx — флаги grep и
rg - Lab — готовые паттерны
- Lab — Bash и grep
Как искать текст в файлах
Что такое поиск текста
Поиск по тексту — это поиск фрагмента строки внутри файла или сразу во многих файлах. В отличие от поиска файла по имени в Проводнике или Everything, здесь важно содержимое — слово в логе, функция в коде, настройка в конфиге.
Такой поиск нужен, когда файл уже есть, но непонятно, в какой строке нужная информация, или нужно найти все вхождения по папке проекта.
Быстрый поиск — что можно сделать
| Задача | Типичный способ |
|---|---|
| Найти слово в открытом документе | Ctrl+F / Cmd+F |
| Найти по всем файлам в папке | VS Code, Notepad++, FileSeek |
| Найти на диске Windows / macOS | Проводник, Spotlight, mdfind |
| Найти в логах и на сервере | grep, findstr, Select-String |
| Отфильтровать вывод команды | конвейер | и grep |
Сначала удобнее освоить горячие клавиши в программе, затем — поиск по папке, и только после этого — терминал (ниже в статье).
В одном открытом документе
Для любого открытого файла (Word, PDF в просмотрщике, Блокнот, страница в браузере, редактор кода):
- Windows — Ctrl+F;
- macOS — Cmd+F.
Введите искомый текст. Программа подсветит совпадения в текущем документе и позволит переходить между ними (F3 или кнопки "далее" / "назад" в зависимости от приложения).
По папке и проекту
Notepad++ (Windows)
- Ctrl+Shift+F — окно поиска по файлам.
- Введите текст, укажите папку.
- Нажмите "Найти все" — список файлов и строк с совпадениями.
Подходит для конфигов, логов и скриптов на одной машине. Обзор редактора — Notepad++ и VS Code.
Visual Studio Code (Windows, macOS, Linux)
- Ctrl+Shift+F (на Mac — Cmd+Shift+F).
- Откроется вкладка "Поиск" по рабочей области.
- Доступны опции — учёт регистра, только целые слова, регулярные выражения, маска файлов (
*.ts,src/**).
Для разработчиков это основной способ сквозного поиска по репозиторию без терминала.
Windows — Проводник и системный поиск
В Проводнике в правом верхнем углу есть строка поиска. Введите запрос — Windows покажет файлы, в которых, по мнению индекса, встречается текст (работает не для всех типов файлов и не на всех дисках).
Для более широкого поиска по компьютеру — встроенная утилита "Поиск" в меню "Пуск" (или поле поиска на панели задач в новых версиях Windows).
Поиск только по имени файла быстрее через Everything — это другая задача, не поиск внутри текста.
macOS — Spotlight и Terminal
Spotlight — Cmd+Space, введите запрос. Система ищет по проиндексированному содержимому (документы, почта, заметки — в зависимости от настроек).
В Терминале можно вызвать mdfind — поиск по метаданным Spotlight из командной строки.
mdfind "ваш_текст"
mdfind -onlyin ~/Projects "import React"
Linux — grep по папке
В командной строке для текста в файлах используют grep. Пример рекурсивного поиска с номерами строк и точным совпадением слова (-w):
grep -rnw '/путь/к/папке' -e 'ваш_текст'
| Ключ | Смысл |
|---|---|
-r | рекурсивно по каталогу |
-n | номер строки |
-w | целое слово |
-e | шаблон (удобно для строк с - в начале) |
Подробные примеры и флаги — в разделе grep ниже.
Где обычный поиск не сработает
Стандартный Ctrl+F и поиск Проводника рассчитаны на текстовое содержимое. Без специальных программ сложно искать внутри:
- растровых картинок (PNG, JPG) — в файле нет текстового слоя, нужен OCR;
- сканов PDF — то же самое, пока документ не распознан;
- архивов (ZIP, RAR, 7z) — сначала нужно распаковать или использовать архиватор с просмотром;
- бинарных форматов (часть
.exe, базы данных, проприетарные форматы).
Текстовые .log, .txt, .md, .json, .html, исходники — ищутся обычными средствами.
FileSeek (Windows)
FileSeek — отдельная утилита для поиска текста внутри файлов по дереву папок. Everything в первую очередь ищет по имени файла; FileSeek ориентирован на содержимое.
- рекурсивный обход каталогов;
- фильтры по маске (
*.js,*.log); - опции регистра и RegEx;
- заявлена поддержка ряда форматов, включая часть PDF и офисных документов (зависит от типа файла).
Разбор установки и сценариев — в файловых менеджерах и утилитах.
Поиск из командной строки
Когда нужны логи на сервере, скрипты, CI или фильтрация вывода программы, переходят к консольным утилитам. На Linux и macOS это в первую очередь grep; в англоязычной среде говорят grepping — "прогнать grep по файлам". В Windows — findstr (CMD) и Select-String (PowerShell).
Логи, конфиги, package.json, исходники — текстовые файлы из строк. Типичные задачи в терминале:
- показать только строки со словом
error; - найти все вхождения
importв каталогеsrc/.
find ищет файлы и каталоги по имени, дате, размеру (find . -name "*.log").
grep ищет строки внутри уже известных файлов (grep "error" app.log).
Частая связка — сначала find отбирает файлы, затем grep фильтрует содержимое.
Как работает фильтр в терминале
Вы даёте утилите источник (файл, каталог или поток из другой команды) и шаблон. На выход — только строки, которые шаблону соответствуют (по умолчанию — вместе с именем файла, если файлов несколько).
файл(ы) + шаблон → grep / findstr / Select-String → подходящие строки
Шаблон может быть простой подстрокой ("error") или регулярным выражением (RegEx). Для сложных правил см. RegEx — справочник; готовые команды для логов — Lab / 615 и 1115 — рецепты.
Конвейер | передаёт stdout одной команды на stdin другой. Так отфильтровывают вывод длинных команд.
npm list | grep "lodash"
cat app.log | grep ERROR | tail -20
Разбор |, >, && — в знаках препинания.
grep (Linux, macOS, Git Bash, WSL)
grep — консольная утилита для поиска строк по шаблону. Название расшифровывают как Globally search for a Regular Expression and Print — глобальный поиск по регулярному выражению с выводом результатов.
Поиск слова в одном файле
grep "error" server.log
Покажет все строки, где есть подстрока error (регистр учитывается).
Без учёта регистра
grep -i "react" package.json
Найдёт React, react, REACT.
Рекурсивно по каталогу
grep -r "import" src/
Пройдёт все файлы в src/ (включая подкаталоги). С флагом -n в выводе будут номера строк — grep -rn "TODO" .
Полезные флаги (кратко)
| Флаг | Смысл |
|---|---|
-i | без учёта регистра |
-r / -R | рекурсивно по каталогу |
-n | номер строки |
-v | инверсия — строки без совпадения |
-c | только счётчик совпадений |
-E | расширенный RegEx (как egrep) |
-l | только имена файлов, где есть совпадение |
Шпаргалка по Linux-командам и примеры awk / sort рядом — 101 — grep.
Фильтрация вывода других команд
ps aux | grep python
ss -tlnp | grep 8080
tail -f /var/log/myapp/app.log | grep ERROR
На macOS встроенный grep иногда слабее GNU-версии; для больших репозиториев удобнее rg (ripgrep) — см. ниже.
findstr и Select-String в Windows
findstr (CMD)
Быстрый поиск в классической командной строке.
findstr "error" app.log
findstr /I "timeout" C:\logs\*.log
findstr /N /R "error" app.log
| Ключ | Смысл |
|---|---|
/I | без учёта регистра |
/N | номера строк |
/R | шаблон как regex (упрощённый синтаксис, свой для CMD) |
/S | по подкаталогам |
В конвейере CMD.
tasklist | findstr python
netstat -ano | findstr :80
findstr в pipe с кириллицей может вести себя непредсказуемо — дело в ANSI/UTF-8 на stdin. Для Unicode-текста надёжнее PowerShell и Select-String. Подробнее — локализация и символы в Windows (раздел про findstr в pipe).
Select-String (PowerShell)
Рекомендуемый путь в современной Windows-разработке.
Select-String -Pattern "error" -Path "app.log"
Select-String -Path "C:\Logs\*.log" -Pattern "ERROR|FATAL"
Get-Content "app.log" | Select-String -Pattern "timeout"
Шаблоны здесь — .NET RegEx (как в C#). Углублённо про объекты в конвейере — PowerShell — вводная и 113.
Шпаргалка CMD/PowerShell — 102 — поиск.
Тот же grep на Windows
- Git Bash или WSL — те же команды, что на Linux.
- OpenSSH / удалённый сервер —
grepна стороне Linux, даже если локально Windows.
ripgrep (rg) — быстрый поиск в проекте
ripgrep (rg) — кроссплатформенная утилита на Rust, по умолчанию уважает .gitignore и пропускает node_modules, если каталог в ignore.
rg -n "TODO|FIXME" --type js
rg -i "connection timeout" .
rg --glob "*.log" "\[ERROR\]"
Для ежедневной работы в репозитории многие разработчики предпочитают rg вместо grep -r. Флаги и рецепты — 1115 — ripgrep.
В веб-разработке
| Задача | Пример |
|---|---|
| Есть ли пакет в дереве зависимостей | npm list | grep lodash |
| Где в коде старый импорт | grep -rn "from 'old-lib'" src/ или rg "from 'old-lib'" src |
| Ошибки в логе dev-сервера | grep -i error logs/dev.log |
| Фильтр логов Android на Windows | adb logcat | findstr MyApp |
На сервере после деплоя те же приёмы для /var/log/... — см. фронтенд и бэкенд — минимум команд.
Рекурсивный grep -r по корню проекта без исключений может идти минутами из‑за node_modules. Ограничивайте путь (src/), используйте rg или исключения (grep -r --exclude-dir=node_modules).
Когда хватит подстроки, когда нужен RegEx
| Ситуация | Достаточно |
|---|---|
| Точное слово в логе | grep "ERROR" или grep -i error |
| Несколько вариантов | `grep -E 'WARN |
| Дата, IP, email по маске | RegEx + -E / -Pattern |
| Замена текста в файле | sed (Unix) или PowerShell -replace — 1115 |
Если шаблон непонятен — сначала RegEx с нуля, затем проверка на regex101.com с нужным движком (PCRE, .NET, JavaScript).
Связанные материалы
| Тема | Куда |
|---|---|
| Синтаксис RegEx | 615 |
| grep, sed, awk, findstr — рецепты | 1115 |
| Готовые паттерны и команды | Lab / 615, Lab / 1151 |
| Пайп и перенаправление | 11 |
| Linux / Windows — полные справочники | 101, 102 |
grep в Bash-скриптах | Bash — RegEx и grep |
| Поиск в IDE и утилитах | продвинутый софт / FAQ |
| FileSeek, Everything | файловые менеджеры |
| Notepad++, VS Code | редакторы |