Обзор pdfgrep: поиск текста и регулярных выражений в PDF из командной строки

pdfgrep — узкоспециализированная консольная утилита для поиска текста внутри PDF-файлов. Она полезна там, где обычный grep видит только бинарный контейнер PDF: pdfgrep извлекает текст через Poppler, применяет строковый или регулярный шаблон и выводит совпадения вместе с именем файла, страницей и контекстом. Актуальная стабильная версия 2.2.0 сохраняет привычную для Unix логику grep, поддерживает рекурсивный обход каталогов, PCRE2, кэширование извлечённого текста и работу с защищёнными паролем документами, но не содержит OCR, графического интерфейса, редактора PDF или индексатора.

ПараметрСостояние
ТипКонсольная утилита полнотекстового поиска по PDF без индекса
Разработчик и сопровождениеПроект pdfgrep; сопровождает Hans-Peter Deifel, есть внешние участники
Актуальная стабильная версия2.2.0, тег от 25 марта 2024 года
Текущий статусСтабильный релиз не новый, но основной GitLab-репозиторий остаётся активным
ЛицензияGNU GPL 2.0 или более поздняя версия
Основной форматPDF с извлекаемым текстовым слоем
ПоискРасширенные регулярные выражения по умолчанию, фиксированные строки и PCRE2
ИнтерфейсКомандная строка; результаты печатаются в стандартный вывод
Платформы распространенияLinux-дистрибутивы, macOS через Homebrew или MacPorts, OpenBSD и FreeBSD; исходный код
WindowsНативный официальный выпуск не заявлен; существуют Cygwin-сценарии, а в разработке есть исправления сборки под Cygwin
OCRНет; сканы без текстового слоя не распознаются
Аккаунт, облако, подпискаНе требуются; утилита работает локально

Скачать pdfgrep

Бесплатно
В реестре российского ПО
Чистая установка

Новейшая версия для Виндовс, macOS и Линукс. Удобный редактор PDF под российские реалии.

⬇ Скачать PDF Commander бесплатно

⬇ Скачать pdfgrep

Безопасный путь получения начинается с официальной страницы проекта и штатного менеджера пакетов операционной системы. На момент подготовки обзора официальный сайт предлагает исходный архив pdfgrep 2.2.0 и публикует для него SHA-256 0661e531e4c0ef097959aa1c9773796585db39c72c84a02ff87d2c3637c620cb, а также отдельную GPG-подпись. Это предпочтительнее случайных бинарных сборок: для Linux и macOS проект прямо рекомендует сначала проверить наличие pdfgrep в репозитории своей системы.

Версия 2.2.0 присутствует в актуальных пакетных источниках Debian и Ubuntu, Fedora и EPEL, Arch Linux, а Homebrew также распространяет стабильную формулу 2.2.0 для современных macOS и Linux. Официальная страница дополнительно перечисляет openSUSE, Gentoo, OpenBSD, FreeBSD и macOS через MacPorts. Если пакет есть в репозитории системы, именно он обычно удобнее ручной сборки: менеджер пакетов сам подтянет Poppler, libgcrypt и нужные библиотеки регулярных выражений.

Стабильный архив и ветка разработки

Стабильный архив 2.2.0 подходит для воспроизводимой установки и для сред, где важно зафиксировать версию. Ветка master хранится в GitLab и может содержать более свежие исправления, но официальный сайт прямо предупреждает, что текущая версия из Git может быть менее стабильной, чем релиз. Для рабочей машины без конкретной причины переходить на master разумнее использовать пакет дистрибутива или подписанный релизный архив.

Старые SourceForge-зеркала не следует воспринимать как официальный канал: проект перенёс сайт, архивы и инфраструктуру на pdfgrep.org ещё в 2015 году и отдельно просил не загружать оттуда релизы. Нативного официального установщика для Windows на странице загрузки нет, поэтому старые сторонние EXE-файлы не стоит путать с актуальной официальной версией.

Что такое pdfgrep

pdfgrep — самостоятельная программа командной строки, которая ищет шаблон в одном или нескольких PDF и печатает найденные строки. Её модель близка к GNU grep: знакомые ключи вроде -i, -n, -c, -r, -A, -B и -C имеют сходную логику, но вместо номера строки ключ -n сообщает номер страницы PDF. Важное отличие от универсальных индексаторов состоит в том, что pdfgrep не строит постоянную поисковую базу: документ открывается, текст извлекается, после чего к нему применяется шаблон.

Проект сопровождает Hans-Peter Deifel. Стабильная версия 2.2.0 была помечена тегом 25 марта 2024 года; при этом репозиторий не выглядит заброшенным — в 2026 году в master появились изменения CI, тестов и сборки под Cygwin. Поэтому корректнее говорить о редком релизном цикле, а не о снятом с поддержки продукте.

Название pdfgrep описывает назначение буквально, но это не «PDF-редакция grep» в составе GNU и не графический поиск по библиотеке. Утилита также не является OCR-системой и не заменяет просмотрщик. Для чтения страниц, аннотаций и визуальной навигации нужен отдельный PDF-reader, а для сканов без текстового слоя — программа распознавания, например ABBYY FineReader или другой OCR-инструмент.

Основные функции pdfgrep

Шаблоны: ERE, фиксированные строки и PCRE2

По умолчанию PATTERN — расширенное регулярное выражение. -F переключает поиск на фиксированные строки, а -P включает Perl-совместимые выражения через PCRE2. В версии 2.2.0 проект перешёл с прежней PCRE на PCRE2. Шаблон можно повторять через -e или читать по одному на строку из файла ключом -f; несколько шаблонов объединяются по логике «совпал любой». -i отключает различие регистра.

Много файлов и рекурсивный обход

Команда принимает несколько PDF и умеет обходить каталоги. -r идёт рекурсивно и следует символьным ссылкам только тогда, когда они явно указаны в командной строке; -R следует ссылкам и внутри дерева. —include и —exclude ограничивают имена glob-масками. В 2.2.0 шаблон PDF по умолчанию учитывает разные варианты регистра расширения. Фильтрации по размеру или времени изменения нет: официальный manual предлагает сочетать pdfgrep с find и xargs.

Страница, контекст и форма вывода

-n добавляет страницу. В 2.2.0 параметр может выводить физический index или PDF page label, например римскую нумерацию, если она задана автором файла. -A, -B и -C показывают строки после, до или вокруг совпадения; -o оставляет только совпавший фрагмент. -H принудительно печатает имя файла, -h скрывает его. Цветовое выделение управляется —color, а -Z ставит NUL после имени файла, что удобно для безопасной передачи путей в xargs -0 и похожие инструменты.

Подсчёт, списки файлов и автоматизация

-c считает совпадения по файлу, -p — по страницам, -l выводит только файлы с совпадением, -L — без совпадений, -m останавливает обработку файла после заданного числа совпадений. -q подавляет обычный вывод. Код завершения 0 означает «найдено», 1 — «не найдено», 2 — ошибку. Для -q есть особенность: уже найденное совпадение может привести к коду 0 даже при последующей ошибке, поэтому строгие проверки должны учитывать stderr.

Диапазон страниц, кэш и пароли

—page-range ограничивает поиск списком страниц и диапазонов, например 2-3,5,7-10. —cache сохраняет извлечённый текст в пользовательском XDG-кэше и ускоряет повторные запросы по неизменным PDF; кэш должен быть включён уже при первом проходе. —password открывает защищённые документы и может повторяться для нескольких паролей. Manual предупреждает, что пароль виден в истории shell и списке процессов, поэтому ключ не подходит для секретов в небезопасной многопользовательской среде.

Файлы кэша располагаются в ${XDG_CACHE_HOME}/pdfgrep/. Man-страница также описывает автоматическую уборку старых записей: сохраняется ограниченное число элементов старше суток. Это означает, что —cache рассчитан на ускорение рабочей выборки, а не на создание долговечного поискового индекса, который можно администрировать как отдельную базу.

Пустой текст и экспериментальный unac

—warn-empty предупреждает, когда PDF не содержит поискового текста, что характерно для сканов. Это диагностика, а не OCR. Экспериментальный —unac удаляет диакритику и лигатуры из шаблона и текста, но работает только в сборке с libunac, поэтому его наличие зависит от конкретного пакета.

Интерфейс и удобство использования

У pdfgrep нет окон, панели результатов или предпросмотра страницы: рабочая зона — терминал. Пользователь задаёт шаблон, файлы и ключи, а команда печатает строки результата. Для знакомого с grep человека освоение быстрое, потому что -i, -n, -c, -r, -A, -B и -C ведут себя ожидаемо. Новичку сложнее не pdfgrep, а правила кавычек, glob-масок и экранирования в shell.

При нескольких файлах имя документа добавляется автоматически, -n показывает страницу, цвет выделяет совпадение, а контекст расширяется отдельными ключами. Такой вывод легко перенаправить в файл или передать awk, sed, xargs и собственному скрипту. Официальная справка — —help и man-страница на английском; некоторые пакеты также устанавливают Bash- и Zsh-completion.

Цвета можно адаптировать через переменную окружения GREP_COLORS: pdfgrep использует совместимый с grep синтаксис для оформления совпадений, имён файлов и номеров страниц. Для интерактивной работы это удобнее, чем собственная тема программы, а для логов и машинного разбора цвет лучше отключать параметром —color=never, чтобы ANSI-последовательности не попадали в сохранённый текст.

Для чтения найденной страницы нужен отдельный viewer. На Linux логичным дополнением будут Okular или Evince: pdfgrep находит файл и страницу, просмотрщик показывает верстку, изображения, ссылки и аннотации.

Поддерживаемые форматы и совместимость

Входной формат pdfgrep — PDF. Прямой поиск по DOCX, ODT, EPUB, TXT, архивам и изображениям не заявлен. Если коллекция смешанная, потребуется несколько инструментов либо универсальная оболочка вроде ripgrep-all или индексатор Recoll.

Критично наличие извлекаемого текстового слоя. Офисный PDF обычно подходит, а скан, состоящий из изображений, не становится поисковым только из-за расширения .pdf. Сначала нужен OCR, например отдельный инструмент класса OCR CuneiForm. Нестандартные шрифты, колонки и сложная внутренняя структура могут приводить к тому, что порядок извлечённого Poppler текста отличается от визуального.

Исходный PDF программа не изменяет. Результат — текст в stdout и код завершения, поэтому его можно сохранить обычным перенаправлением оболочки. Подтверждённые платформы распространения — Debian и производные, Arch, Fedora, RHEL/CentOS через EPEL, openSUSE, Gentoo, macOS через Homebrew или MacPorts, OpenBSD и FreeBSD. Нативный официальный Windows-релиз не заявлен; существуют Cygwin-сценарии, а master 2026 года содержит исправления сборки для Cygwin.

Производительность и стабильность

Основная стоимость поиска — разбор PDF и извлечение текста Poppler. При повторном переборе крупных неизменных файлов —cache полезен: после первого прохода pdfgrep может читать сохранённое текстовое представление вместо повторного извлечения. Для разового поиска кэш не обязательно даёт выигрыш, потому что его сначала нужно создать.

Собственного пользовательского параметра «N потоков» нет. Официальный manual показывает многопроцессорный сценарий через find и GNU parallel, то есть параллелизм организуется внешними Unix-инструментами. Для большого каталога это может ускорить работу, но число процессов следует соотносить с CPU, памятью и скоростью накопителя.

Релиз 2.2.0 исправил падение при некорректной locale и проблему —warn-empty вместе с —cache, а минимальная версия poppler-cpp при сборке поднята до 0.36.0 из-за старой ошибки Poppler, способной давать неверный текстовый результат. При спорном совпадении полезно отдельно проверить тот же файл через pdftotext: pdfgrep зависит от качества текстового извлечения.

Отсутствие совпадения не доказывает, что слова визуально нет на странице. Сканы, необычные кодировки, Unicode-нормализация и сложная верстка могут влиять на результат, поэтому критические проверки стоит валидировать на контрольных PDF.

Отдельный класс пограничных случаев связан с канонически эквивалентными Unicode-последовательностями. В issue-трекере проекта описан пример, где буква с диакритикой, записанная одним кодпоинтом, и та же буква как базовый символ плюс комбинируемый знак не дают одинакового совпадения. Поэтому для многоязычных архивов полезно проверять реальные текстовые кодпоинты и не считать визуальную одинаковость символов гарантией идентичного поиска.

Лицензирование и версии

pdfgrep распространяется как свободное ПО под GNU GPL 2.0 или более поздней версией. Коммерческой редакции, подписки, лимита файлов, водяных знаков, пробного периода, регистрации или активации нет. Стабильные архивы доступны с контрольной суммой и GPG-подписью.

Текущий стабильный выпуск — 2.2.0; предыдущая 2.1.2 относится к 2018 году, поэтому релизный цикл редкий. При этом 2.2.0 остаётся актуальным на официальном сайте и в современных пакетных репозиториях, а master получает изменения. Обычный поиск работает локально: аккаунт и облачный сервер не требуются.

Системные требования

Linux и BSD

Для готового пакета зависимости определяет дистрибутив. Актуальный Arch-пакет 2.2.0-6 зависит от libgcrypt, PCRE2 и Poppler; Debian и Ubuntu также используют Poppler C++ и PCRE2. При сборке релиза 2.2.0 требуется poppler-cpp не старее 0.36.0. Проект не задаёт минимальные объём RAM, частоту CPU или дисковую квоту.

Сборка из исходников требует компилятора C++14, development-заголовков зависимостей и autotools. PCRE2 нужен для режима -P, libunac — только для экспериментального —unac.

При этом обязательный минимум зависит от выбранной конфигурации: стандартные POSIX-подобные выражения не требуют включать PCRE2-функцию -P, а генерацию man-страницы можно отключить параметром —disable-doc. Для packaged-версий эти решения уже приняты сопровождающим дистрибутива, поэтому системный пакет обычно предсказуемее собственной минимальной сборки.

macOS

Официально рекомендуются Homebrew и MacPorts. Homebrew публикует bottle-сборки 2.2.0 для поддерживаемых Apple Silicon и Intel-конфигураций и сам устанавливает нужные библиотеки.

Windows

Нативные официальные требования не опубликованы, поскольку штатного Windows-выпуска нет. Cygwin используется как совместимая Unix-среда, но это не обычный нативный установщик.

Карта критических зависимостей

ЗависимостьЗачем нужнаЧто произойдёт при проблемеЧто проверить
Poppler / poppler-cppЧтение PDF и извлечение текстаФайл не откроется или текст будет извлечён неполноВерсию библиотеки и результат pdftotext на проблемном документе
PCRE2Режим -P для Perl-совместимых регулярных выраженийСложный PCRE2-шаблон недоступен в сборке без этой поддержкиВывод pdfgrep —version и параметры конкретного пакета
libgcryptОбязательная библиотечная зависимость актуальных пакетовПакет не запустится при отсутствующей динамической библиотекеЦелостность пакетной установки
Локаль и кодировка окруженияКорректная работа с символами и шаблонамиОшибки обработки текста или неожиданные совпаденияНастройки locale и воспроизводимость на UTF-8 окружении
Текстовый слой PDFМатериал, по которому фактически идёт поискВизуальный текст скана не находится—warn-empty и отдельное извлечение текста
Кэш XDGУскорение повторных запросовПотеря ускорения или устаревший производный файл после вмешательства пользователяКаталог пользовательского кэша и повторный запуск с —cache

Аккаунт, лицензирующий сервер и облачный API не нужны. Зато локальное окружение важно: версия Poppler и структура PDF прямо влияют на результат, поэтому в воспроизводимых серверных задачах полезно фиксировать версии пакетов.

Хронология развития и поддержки

Первые теги проекта относятся к 2010 году. В 1.4.0 (2015) появились PCRE, фиксированные строки, несколько паролей, —only-matching, —null и предупреждение о PDF без текста; тогда же проект перенёс официальные загрузки с SourceForge на pdfgrep.org.

Версия 2.0 (2017) сделала контекст совместимее с grep и добавила кэш. В 2.1.0 (2018) появились диапазоны страниц, -f, повторяемый -e и -l/-L. Версия 2.2.0 от 25 марта 2024 года перешла на PCRE2, добавила вывод PDF page label, улучшила маску расширений и исправила locale и —warn-empty с кэшем. В 2026 году master продолжил получать изменения CI, тестов и Cygwin-совместимости.

Преимущества и недостатки pdfgrep

Плюсы и минусы

Плюсы ✔️
  • Ищет непосредственно в PDF без предварительного ручного создания TXT-копий.
  • Сохраняет знакомую grep-модель ключей и хорошо встраивается в shell-скрипты.
  • Поддерживает фиксированные строки, расширенные регулярные выражения и PCRE2.
  • Умеет рекурсивно обходить каталоги, фильтровать имена файлов и возвращать страницу совпадения.
  • Есть кэш для повторных запросов по большим неизменным документам.
  • Поддерживает контекст, подсчёты, списки совпавших файлов и машинно-пригодные коды завершения.
  • Работает локально, не требует учётной записи, подписки и передачи PDF в облако.
  • Свободная лицензия и доступный исходный код упрощают аудит и пакетирование.
Минусы ❌
  • Нет OCR: сканы без текстового слоя не становятся поисковыми.
  • Нет графического интерфейса, предпросмотра страницы и клика по результату.
  • Качество поиска зависит от того, как Poppler извлекает текст из конкретного PDF.
  • Нет постоянного индекса по коллекции, поэтому первый проход по большому архиву повторяет извлечение текста.
  • Нативный официальный Windows-выпуск отсутствует.
  • Пароль через —password виден в истории команд и списке процессов, что ограничивает безопасные сценарии.
  • Работа ограничена PDF; смешанные архивы документов требуют дополнительных инструментов.
  • Релизный цикл редкий, поэтому исправления master могут долго не попадать в новый стабильный тег.

Сравнение с аналогами

pdfgrep корректнее сравнивать не с редакторами, а с поисковыми инструментами и просмотрщиками по форматам, индексу, regex, платформе и рабочему сценарию.

ИнструментИнтерфейсФорматыRegexИндексПлатформыЛучший сценарий
pdfgrep 2.2.0CLIPDFERE и PCRE2Нет, есть кэшВ основном Unix-подобные ОССкрипты и точный поиск по PDF
Sumatra PDF 3.6.1 / 3.7 pre-releaseGUI; CLI grep в 3.7 pre-releasePDF, EPUB, MOBI, CBZ, DjVu, XPS, CHM и другиеCLI 3.7 pre-release поддерживает regexНет как отдельного индексатораWindowsЧтение, визуальная проверка, Windows
ripgrep-allCLIPDF, DOCX, EPUB, архивы и другиеДаКэш адаптеровLinux, macOS, WindowsПоиск по смешанной коллекции
RecollGUI, CLI, webМного форматов через фильтрыНе grep-модельДаLinux, Windows, macOSПостоянная большая библиотека
pdftotext + GNU grepCLIPDF после извлеченияДаНетUnix-подобные ОС и портыРаздельный контроль извлечения и поиска

Стабильная Sumatra PDF 3.6.1 — прежде всего Windows-просмотрщик с визуальным поиском; отдельный sumatrapdf-tool grep развивается в 3.7 pre-release. pdfgrep естественнее в Unix-скриптах, Sumatra — при чтении и визуальной навигации. ripgrep-all шире по форматам, но требует адаптеров; Recoll строит постоянный индекс и выгоднее при частых запросах к одной библиотеке.

Если нужен обычный графический reader, логичнее Adobe Acrobat Reader или другой просмотрщик. Если проблема — сканы, выбирать нужно OCR, а не более сложный regex: pdfgrep изображения не распознаёт.

Инструкция по установке

Debian и Ubuntu

Установите пакет командой sudo apt install pdfgrep. В Ubuntu 24.04 LTS и 26.04 LTS доступна ветка 2.2.0. Проверка: pdfgrep —version, затем pdfgrep -n «фраза» файл.pdf по документу с известным текстом.

Fedora и EPEL

В Fedora 2.2.0 есть в актуальных репозиториях, для RHEL-совместимых систем пакет публикуется через EPEL. После подключения нужного источника используйте sudo dnf install pdfgrep.

Arch Linux

В репозитории Extra находится pdfgrep 2.2.0-6. Установка: sudo pacman -S pdfgrep. Пакет ставит бинарник, man-страницу и completion для Bash и Zsh.

macOS через Homebrew

Команда brew install pdfgrep устанавливает стабильную 2.2.0 и совместимые зависимости. После установки проверьте pdfgrep —version и один локальный PDF.

Сборка из исходников

Скачайте официальный tar.gz 2.2.0, сверяйте SHA-256 0661e531e4c0ef097959aa1c9773796585db39c72c84a02ff87d2c3637c620cb и при необходимости GPG-подпись. После установки development-пакетов выполните ./configure, make и sudo make install. Для master перед configure нужен ./autogen.sh. —without-libpcre отключает -P, а —with-unac добавляет экспериментальный unac при наличии библиотеки.

Перед make имеет смысл просмотреть итог configure: он показывает, какие необязательные возможности обнаружены. Это особенно важно для -P и —unac, потому что одинаковое название версии pdfgrep не гарантирует одинаковый набор опций у самостоятельно собранных бинарников. После установки сохраните использованные параметры сборки, если окружение должно воспроизводиться на сервере или в CI.

Первый запуск и безопасное удаление

Начните с pdfgrep —help и pdfgrep —version, затем проверьте известную фразу с -n. Удаляйте тем же менеджером пакетов: apt remove, dnf remove, pacman -R или brew uninstall. Для ручной сборки README предусматривает sudo make uninstall. Пользовательский кэш может остаться отдельно; исходные PDF штатный поиск не меняет.

Практические кейсы

Найти термин и страницу

Цель: найти термин в длинном договоре. Шаги: pdfgrep -n -i «force majeure» contract.pdf. Проверка: откройте указанную страницу в viewer. Ограничение: текст на изображении без OCR не найдётся.

Найти документы с номером проекта

Цель: получить только имена подходящих PDF. Шаги: из корня архива выполните pdfgrep -r -l -F «PRJ-2048» . Проверка: один найденный файл повторно ищите с -n. Ограничение: отбор по размеру требует find или другого внешнего инструмента.

Ограничить поиск страницами

Цель: проверить только приложение отчёта. Шаги: pdfgrep —page-range=80-120 -n «Audit» report.pdf. Проверка: номера должны лежать в диапазоне. Ограничение: диапазон задаётся индексами, даже если для вывода используется -n=label.

Проверить сложный PCRE2-шаблон

Цель: искать структурированные номера или даты. Шаги: используйте -P, заключите выражение в кавычки и сначала добавьте -o на контрольном PDF. Проверка: должны печататься только ожидаемые фрагменты. Ограничение: порядок текста в таблицах и колонках зависит от Poppler.

Найти документы, где одновременно встречаются два условия

Цель: оставить PDF, содержащие и «bar», и «foo». Шаги: сначала получите NUL-разделённый список командой pdfgrep -Z -l «bar» *.pdf, затем передайте его через xargs -0 во второй pdfgrep -H «foo». Именно такой композиционный приём приведён в официальном manual. Проверка: каждый итоговый файл отдельно должен находиться по обоим словам. Ограничение: это AND на уровне файла, а не требование встретить слова в одной строке или на одной странице.

Распараллелить большой каталог внешним инструментом

Цель: задействовать несколько ядер при большом числе независимых PDF. Шаги: сформируйте NUL-разделённый список через find и передайте его GNU parallel, который запускает отдельные экземпляры pdfgrep. Проверка: сравните набор найденных файлов с последовательным запуском, а не только время. Ограничение: чрезмерное число процессов может упереться в диск или память и не ускорить задачу.

Выявить сканы без текстового слоя

Цель: понять, почему PDF не ищется. Шаги: запустите запрос с —warn-empty и сравните файл с pdftotext. Проверка: пустое извлечение подтверждает необходимость OCR. Ограничение: наличие текста не гарантирует, что OCR точен.

Использовать код завершения в скрипте

Цель: отличать найденный маркер от его отсутствия. Шаги: вызовите pdfgrep -F «CONFIDENTIAL» file.pdf и обработайте 0, 1 и 2 отдельно. Проверка: протестируйте файл с фразой, без неё и ошибочный путь. Ограничение: с -q найденное совпадение может скрыть последующую ошибку кодом 0.

Навигатор по сбоям

  • Команда не найдена: проверьте установку и PATH.
  • В viewer текст виден, но совпадения нет: проверьте —warn-empty и pdftotext; скану нужен OCR.
  • -P не работает: убедитесь, что сборка содержит PCRE2.
  • -r пропускает файл: проверьте —include/—exclude, права, расширение и символьные ссылки; для полного следования ссылкам используйте -R.
  • После обновления результат изменился: зафиксируйте версии pdfgrep и Poppler и сравните извлечённый текст.
  • Парольный PDF не читается: проверьте пароль, но не оставляйте секрет в постоянной истории shell.

Набор практических микроопераций

  • -F: точная строка без regex-интерпретации; кавычки обязательны при пробелах.
  • -i: поиск без различия регистра; результат зависит от локали и извлечённого текста.
  • -o: вывести только совпавшую часть; удалите ключ, чтобы вернуть контекст строки.
  • -C 2: по две строки до и после; с -o контекст не действует.
  • -l / -L: получить только файлы с совпадением или без него.
  • -m 1: остановить чтение файла после первого совпадения.
  • -p: посчитать совпадения по страницам.
  • -Z: безопасно передать имена с пробелами инструменту, понимающему NUL.
  • —cache: создать кэш при первом проходе и использовать его в повторных поисках.
  • —page-range: сузить поиск заранее известным диапазоном страниц.

Часто задаваемые вопросы

Может ли pdfgrep искать русский текст?

Да, если Poppler корректно извлекает Unicode-текст и локаль окружения настроена подходящим образом. При проблемах сначала проверяйте pdftotext, а уже затем шаблон.

Есть ли OCR?

Нет. —warn-empty только сообщает об отсутствии поискового текста. Скан нужно распознать внешним OCR.

Можно ли искать во всём каталоге?

Да, через -r или -R; —include и —exclude ограничивают набор имён.

Можно ли задать несколько шаблонов без одного огромного regex?

Да. Повторяйте -e или передайте файл шаблонов через -f. Все шаблоны проверяются как альтернативы; для условия «файл должен содержать A и B» удобнее последовательный конвейер из двух запусков.

Чем —cache отличается от индекса Recoll?

Кэш экономит повторное извлечение текста, но не создаёт полноценную поисковую базу. Recoll лучше для постоянной библиотеки с частыми запросами.

Можно ли выводить PDF page label?

Да. В 2.2.0 —page-number принимает label и печатает метку страницы. —page-range при этом задаётся индексами.

Поддерживаются ли пароли?

Да, —password можно повторять. Но пароль виден в истории shell и ps, что важно для безопасности.

Почему порядок слов отличается от страницы?

PDF хранит объекты и координаты, а Poppler восстанавливает текстовый поток. Колонки и сложная верстка могут менять порядок.

Есть ли официальный Windows EXE?

Нативного официального релиза на странице загрузки нет. Cygwin — отдельная совместимая среда, а не обычный Windows-инсталлятор.

Заменяет ли pdfgrep Sumatra PDF?

Нет. pdfgrep не показывает страницы, изображения и оглавление. Sumatra — viewer; её 3.7 pre-release дополнительно развивает консольный grep.

Меняет ли программа PDF?

Нет, поиск читает файл и пишет результат в stdout.

Как отличить «не найдено» от ошибки?

По коду завершения: 0 — найдено, 1 — нет совпадений, 2 — ошибка. У -q есть описанное исключение после найденного совпадения.

Нужен ли интернет?

Нет для самого поиска. Сеть нужна лишь для установки, обновления или получения исходников.

Вывод

pdfgrep подходит администраторам, разработчикам и исследователям Unix-подобных систем, которым нужен воспроизводимый поиск по PDF из терминала. Он открывает документ через Poppler, применяет grep-подобный шаблон и возвращает страницу, текст, имя файла и код завершения — удобно для скриптов и пакетной проверки без аккаунта и облака.

Другой инструмент разумнее для трёх задач: визуального чтения, OCR сканов и постоянного поиска по большой смешанной библиотеке. На Windows стабильная Sumatra PDF удобнее как просмотрщик, а 3.7 pre-release развивает отдельный CLI grep. pdfgrep остаётся сильным именно как Unix-утилита для shell-композиции и регулярных выражений.


Ваш адрес email не будет опубликован. Обязательные поля помечены *