Перейти к содержанию
Lesson Loom
Меню
Все материалы

Как найти фразу в папке заметок с ripgrep

Ограничьте поиск нужным каталогом и форматом, найдите совпадения по строкам и разберите случаи, когда результат пуст.

Вы помните фразу «калибровка датчика», но не имя заметки. Искать по одному файлу долго, а поиск в домашнем каталоге соберёт лишнее. Ripgrep, команда rg, умеет пройти по папке и вывести путь и номер строки каждого совпадения. Для начала полезно задать узкую область поиска и использовать буквальный режим. Так проще понять, почему конкретная запись нашлась или отсутствует.

Пусть рабочий каталог называется course-notes. В нём есть заметки Markdown, текстовые приложения и каталог со служебными выгрузками. Нужно найти строку с названием процедуры, открыть одну найденную заметку и проверить, актуальна ли инструкция. Пример ниже предполагает, что ripgrep уже установлен. Он читает локальные файлы и не требует отправлять их в сервис.

Проверьте область перед поиском

Найдите точный путь к папке и откройте её родительский каталог в терминале. В учебной папке создайте equipment.md и напишите в нём одну строку калибровка датчика выполнена после замены батареи. В соседней папке создайте заметку с такой же фразой, чтобы проверить, что поиск её не зацепит. Если используете рабочие материалы, достаточно заранее знать одну строку, которая точно существует.

Не запускайте первый поиск из корня диска или всего домашнего каталога. Помимо лишних совпадений вы получите ошибки чтения, а вывод может содержать пути к личным данным. Указание явной папки делает результат повторяемым. В терминале важен текущий каталог, потому что относительный путь ./course-notes считается именно от него. Если терминал открыт не там, укажите точный полный путь в кавычках.

Ищите точную последовательность букв

Запустите такой запрос из родительского каталога. Кавычки удерживают фразу как один аргумент. Ключ -F трактует её буквально, без синтаксиса регулярных выражений.

rg -n -F -g '*.md' -- 'калибровка датчика' ./course-notes

-n добавляет номер строки. Маска -g '*.md' ограничивает поиск файлами Markdown. Двойной дефис помогает отделить параметры от фразы и путей. В выводе найдите equipment.md и номер строки. Откройте этот файл и убедитесь, что совпадение относится к нужной процедуре. Ссылка на калибровку в старом журнале не означает, что там находится инструкция.

Если вам нужны соседние строки, добавьте -C 2 до двойного дефиса. Это показывает по две строки вокруг совпадения. Используйте контекст, чтобы отличить заголовок, пример и реальное указание. Для списка файлов без строк есть параметр -l. Он пригодится, если одно слово встречается десятки раз внутри каждого документа, а сначала нужно лишь понять, какие файлы открыть.

Разберите пустой результат

Сначала проверьте известную контрольную строку в конкретном файле. Уберите фильтр по расширению и передайте путь к equipment.md явно. Если всё ещё пусто, сравните регистр, буквы е и ё, лишние пробелы и перенос строки. Команда с буквальным режимом ищет именно заданную последовательность. Для проверки регистра можно добавить -i. Это не исправляет отличия в буквах или разбивке фразы.

Затем проверьте правила обхода. Ripgrep по умолчанию учитывает файлы игнорирования и пропускает некоторые скрытые и бинарные файлы. Это полезно в проектах, где много зависимостей и технических каталогов. Если нужная папка пропускается, разберитесь, какое правило действует. Временно ослабляйте только нужное ограничение и сохраняйте узкий путь. Запуск без всех ограничений по широкому дереву обычно создаёт больше шума, чем пользы.

Наконец, проверьте формат. PDF, офисные документы и архивы могут содержать текст, но это не значит, что команда увидит его как строки обычного файла. Для таких материалов используйте средство поиска самого приложения или осознанный экспорт в текст. Пустой ответ rg сообщает только о просмотренной области и форматах, которые он смог прочитать.

Сохраните полезные запросы

Если фразу придётся искать снова, запишите команду рядом с инструкцией и поясните, какую папку она ожидает. Для другого проекта замените путь и расширение, не переписывая лишние параметры. Удобно держать два примера. Один показывает места употребления термина, другой ищет точное имя параметра в настройках. Для сложных задач переходите к регулярным выражениям после проверки простого буквального поиска.

Упражнение выполнено, если команда нашла строку в учебной заметке, не показала совпадение за пределами каталога и вывела номер, по которому можно открыть нужное место. Дополнительная проверка — успешно объяснить один пустой результат, не меняя все настройки одновременно.

Для повторяемого поиска проверьте список файлов заранее. Команда rg --files -g '*.md' ./course-notes покажет пути, которые подходят под область и маску. Сравните несколько важных папок с этим списком. Если файл пропал уже здесь, проблема относится к обходу, имени или фильтру. Если путь виден, отдельно проверьте поисковую фразу и кодировку файла.

Сохраните один пример запроса с кириллицей и один с обычными знаками препинания. Например, можно искать точное значение [готово] в режиме -F. Квадратные скобки останутся обычными символами. Без буквального режима они имели бы значение в регулярном выражении. Такая проверка упрощает диагностику, когда строка визуально совпадает с запросом, а найденные результаты выглядят странно.

Источники