Как может я grep в файлах PDF?

Как упомянуто будьте http://pthree.org/2007/08/12/aptitude-vs-apt-get/, aptitude имеет намного более легкое для использования интерфейса командной строки.

Разве под капотом они не использующий ту же систему APT? Да.

Базовая система не просто apt, но dpkg. Эта система является столь же немой как об/мин, она может только обработать установку и администрирование единственных пакетов. Это отслеживает, который установил файлы, принадлежат который пакет.

apt обрабатывает загрузки репозиториев, отслеживание зависимостей, и так далее для всех отдельных пакетов - который оно затем устанавливает использование dpkg. aptitude делает то же, с другим интерфейсом.

151
29.10.2019, 13:20
16 ответов

Установите пакет pdfgrep, затем используйте команду:

find /path -iname '*.pdf' -exec pdfgrep pattern {} +

——————

Simpliest путь

pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf 
148
27.01.2020, 19:28
  • 1
    Это работает в Mac OSX (Индивидуалисты) также. Установите его с помощью варева. Простой.Спасибо. –  mikiemorales 23.01.2014, 03:28
  • 2
    Из любопытства я проверил источник pdfgrep, и это использует poppler для извлечения строк из PDF. Почти точно как ответ @wag только pagewise, а не, по-видимому, весь документ. –  Andrew Martin 16.09.2014, 14:11
  • 3
    pdfgrep также имеет рекурсивный флаг. Таким образом, этот ответ мог, возможно, быть уменьшен до: pdfgrep -R pattern /path/. Хотя могло бы быть менее эффективно, если это проходит каждый файл, даже если это не PDF. И я замечаю, что это имеет проблемы с международными символами, такими как å, ä и ö. –  Rovanion 14.01.2016, 14:11
  • 4
    На самом деле, -n опция является про для pdfgrep, поскольку это позволяет включать номер страницы в вывод (могло бы быть полезным для последующей обработки). –  JepZ 10.11.2017, 22:18
  • 5
    Этот ответ было бы легче использовать, если бы он объяснил, какие биты команды предназначены к скопированному буквально и которые являются заполнителями. Что pattern? Что {}? Что произошло с '+'? Я понятия не имею после первого чтения... так прочь к странице справочника, я иду, я предполагаю. –  Mark Amery 20.04.2018, 17:44

gpdf мог бы быть тем, в чем Вы нуждаетесь при использовании Gnome! Проверьте это в случае, если Вы не используете Gnome. Это имеет список CLI средства просмотра PDF. Затем можно использовать grep найти некоторый шаблон.

0
27.01.2020, 19:28

Вы могли передать его по каналу через strings первый:-

cat file.pdf | strings | grep <...etc...>
5
27.01.2020, 19:28
  • 1
    Просто используйте strings file.pdf | grep <...>, Вам не нужно cat –  phunehehe 31.01.2011, 16:31
  • 2
    Да - мой ум, кажется, работает лучше с потоками... :-) –  Andy Smith 31.01.2011, 16:57
  • 3
    , если текст сжат, который это - большинство времен. –  akira 31.01.2011, 17:18
  • 4
    Даже если текст является несжатым, это - обычно маленькие части предложений (даже обязательно целые слова!) точно смешанный с информацией о форматировании. Не очень дружественный для strings или grep. –  Jander 31.01.2011, 18:08
  • 5
    можно ли думать о другой причине, почему использование строк для этого не работало бы? Я нашел, что использование строк работает над некоторым PDFs, но не другими. –  hourback 24.11.2015, 21:58

Нет.

PDF состоит из блоков данных, некоторые из них текст, некоторые из них изображения и некоторые из них действительно волшебный необычный XYZ (например, .u3d файлы). Те блоки являются большинством сжатых времен (например, плоский, проверьте http://www.verypdf.com/pdfinfoeditor/compression.htm). Чтобы к 'grep' .pdf необходимо инвертировать сжатие, иначе извлекают текст.

Можно сделать это любой на файл с инструментами такой как pdf2text и grep результат, или Вы выполняете 'индексатор' (взгляд на xapian.org или lucene), который создает доступный для поиска индекс из Ваших файлов pdf, и затем можно использовать инструменты поисковой системы того индексатора для получения содержания PDF.

Но не, Вы не можете grep файлы PDF и надежда на надежные ответы, не извлекая текст сначала.

7
27.01.2020, 19:28

Если Вы имеете poppler-utils установленный (значение по умолчанию на Рабочем столе Ubuntu), Вы могли "преобразовать" его на лету и передать его по каналу к grep:

pdftotext my.pdf - | grep 'pattern'

Это не создаст .txt файл.

57
27.01.2020, 19:28
  • 1
    так.. Вы извлекаете текст перед Вами grep это, что означает, что ответ является "нет". работа привычки –  akira 31.01.2011, 17:18
  • 2
    @akira OP, вероятно, предназначенный, "не открытие PDF в средстве просмотра и экспортируя в текст" –  Michael Mrozek♦ 31.01.2011, 19:36
  • 3
    @akira, Где Вы видите "grep только"? –  Michael Mrozek♦ 31.01.2011, 20:55
  • 4
    @akira ну, я уже сказал, что я думаю, что он, вероятно, имел в виду; он не хочет экспортировать в текст прежде, чем обработать его. Я очень сомневаюсь, что у него есть проблема с любой командой, которая преобразовывает в текст всегда; нет никакой причины не к –  Michael Mrozek♦ 01.02.2011, 07:52
  • 5
    @sherrellbc второй аргумент pdftotext имя файла, в которое это должно записать. Однако условно инструменты обычно позволяют Вам писать в stdout вместо в файл путем определения a - вместо этого. Точно так же некоторые инструменты записали бы в stdout по умолчанию, если Вы опускаете такой аргумент полностью (но это не всегда возможно, не создавая неоднозначность). –  Joost 23.09.2016, 17:06

попробуйте это

find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
    pdftotext "$i" - | grep pattern; done

для печати строк шаблон происходит в PDF

2
27.01.2020, 19:28

Recoll может искать PDFs. Это не поддерживает регулярные выражения, но это имеет много других параметров поиска, таким образом, это могло бы соответствовать Вашим потребностям.

6
27.01.2020, 19:28

Смотрите на общий ресурс grep инструмент crgrep, который поддерживает поиск в файлах PDF.

Это также позволяет искать другие ресурсы как содержание, вложенное в архивах, таблицах базы данных, метаданных изображения, зависимостях от файла АНГЛИЧАНИНА и веб-ресурсах - и комбинации их включая рекурсивный поиск.

3
27.01.2020, 19:28
[116736] В StackOverflow есть дубликат вопроса. Там предлагают вариант ответа harish.venkarts:

Преимуществом по сравнению с аналогичным ответом здесь является флаг [117244] --with-filename[117245] для grep. Это несколько превосходит pdfgrep, так как стандартный grep имеет больше возможностей.

https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files

1
27.01.2020, 19:28

CD в вашу папку, содержащую ваш PDF-файл, а затем ..

pdfgrep 'pattern' your.pdf

Или если вы хотите выполнить поиск в более чем один PDF-файл (например, во всех PDF-файлах в вашей папке)

pdfgrep 'pattern'  `ls *.pdf`

или

pdfgrep 'pattern' $(ls *.pdf)
2
27.01.2020, 19:28

pdfgrep был написан именно для этой цели и доступен в Ubuntu.

Он пытается быть максимально совместимым с grep и, таким образом, обеспечивает «мощь grep», специализированную только для PDF-файлов. Это включает общие параметры grep, такие как - рекурсивный , - игнорировать регистр или - цвет .

В отличие от pdftotext | grep , pdfgrep может выводить номер страницы соответствия эффективным способом и, как правило, быстрее, когда ему не нужно искать по всему документу (например, - max-count или --quiet ).

Основное использование:

pdfgrep PATTERN FILE..

где ШАБЛОН - ваша строка поиска, а ФАЙЛ - список имен файлов (или подстановочные знаки в оболочке).

См. справочную страницу для получения дополнительной информации.

12
27.01.2020, 19:28

Вот быстрый скрипт для поиска PDF в текущем каталоге:

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "usage $0 VALUE" 1>&2
  exit 1
fi

echo 'SEARCH IS CASE SENSITIVE' 1>&2

find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' "$1" \;
3
20.08.2021, 13:38

Если вы просто хотите найти имена/свойства PDF... или простые строки, которые не сжаты или не закодированы, то вместо stringsвы можете использовать приведенный ниже

grep -a STRING file.pdf
cat -v file.pdf | grep STRING

Изgrep --help:

      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text

иcat --help:

  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
1
20.08.2021, 13:38

Самый быстрый способ

grep -rinw "pattern" --include \*.pdf *
0
20.08.2021, 13:38
less mypdf.pdf | grep "Hello, World"
0
20.08.2021, 13:38
pdfgrep -r --include "*.pdf" -i 'pattern'
1
20.08.2021, 13:38

Теги

Похожие вопросы