Esto también funciona en mac osx (Mavericks). Instálelo con brew. Sencillo. Gracias.
mikiemorales
77
Por curiosidad, verifiqué la fuente de pdfgrep y usa poppler para extraer cadenas del pdf. Casi exactamente como la respuesta de @ wag solo por página en lugar de, presumiblemente, todo el documento.
Andrew Martin
44
pdfgrepTambién tiene una bandera recursiva. Así que esta respuesta tal vez podría reducirse a: pdfgrep -R pattern /path/. Aunque podría ser menos efectivo si revisa todos los archivos, incluso si no es un PDF. Y noto que tiene problemas con caracteres internacionales como å, ä y ö.
Rovanion
1
En realidad, la -nopción es un profesional para pdfgrep, ya que permite incluir el número de página en la salida (puede ser útil para un procesamiento posterior).
JepZ
44
Esta respuesta sería más fácil de usar si explicara qué partes del comando deben copiarse literalmente y cuáles son marcadores de posición. ¿Qué es pattern? ¿Qué es {}? ¿Qué pasa con el '+'? No tengo idea desde la primera lectura ... así que supongo que voy a la página del manual.
Mark Amery
56
Si lo ha poppler-utilsinstalado (predeterminado en el escritorio de Ubuntu), puede "convertirlo" sobre la marcha y canalizarlo a grep:
entonces ... extrae el texto antes de seleccionarlo, lo que significa que la respuesta es "no".
akira
18
@akira El OP probablemente significó "sin abrir el PDF en un visor y exportar a texto"
Michael Mrozek
55
@akira ¿Dónde ves "grep only"?
Michael Mrozek
66
@akira Bueno, ya dije lo que creo que probablemente quiso decir; no quiere exportar a texto antes de procesarlo. Dudo mucho que tenga un problema con cualquier comando que se convierta a texto de alguna manera; no hay razón para no hacerlo
Michael Mrozek
2
@sherrellbc El segundo argumento de pdftotextes el nombre de archivo en el que debe escribir. Sin embargo, por convención, las herramientas generalmente le permiten escribir en stdoutlugar de en un archivo especificando un -lugar. Del mismo modo, algunas herramientas escribirían stdoutde forma predeterminada si omite dicho argumento por completo (pero esto no siempre es posible sin crear ambigüedad).
Joost
12
pdfgrep fue escrito exactamente para este propósito y está disponible en Ubuntu.
Intenta ser principalmente compatible grepy, por lo tanto, proporciona "el poder de grep", solo especializado para archivos PDF. Eso incluye opciones comunes de grep, como --recursive, --ignore-caseo --color.
En contraste con pdftotext | grep, pdfgrep puede generar el número de página de una coincidencia de manera eficiente y generalmente es más rápido cuando no tiene que buscar en todo el documento (por ejemplo, --max-counto --quiet).
El uso básico es:
pdfgrep PATTERN FILE..
donde PATTERNestá su cadena de búsqueda y FILEuna lista de nombres de archivo (o comodines en un shell).
Un pdf consta de fragmentos de datos, algunos de ellos de texto, algunos de imágenes y algunos de ellos realmente mágicos XYZ (por ejemplo, archivos .u3d). Esos trozos se comprimen la mayoría de las veces (p. Ej. Plano, consulte http://www.verypdf.com/pdfinfoeditor/compression.htm ). Con el fin de 'grep' un .pdf que tiene para revertir la compresión también conocido como extraer el texto.
Puede hacerlo ya sea por archivo con herramientas tales como pdf2texty grep el resultado, o ejecutar un 'paso a paso' (mira xapian.org o Lucene ), que construye un índice de búsqueda de los archivos .pdf y luego se puede usar la búsqueda herramientas del motor de ese indexador para obtener el contenido del pdf.
Pero no, no puede greparchivos PDF y esperar respuestas confiables sin extraer primero el texto.
Teniendo pdfgrepen cuenta que existe (ver arriba), un "no" plano es incorrecto.
Jonathan Cross
6
Recoll puede buscar archivos PDF. No admite expresiones regulares, pero tiene muchas otras opciones de búsqueda, por lo que puede satisfacer sus necesidades.
Simplemente use strings file.pdf | grep <...>, no necesitacat
phunehehe
Sí, mi mente parece funcionar mejor con las transmisiones ... :-)
Andy Smith
12
no funcionará si el texto está comprimido, que es la mayoría de las veces.
akira
66
Incluso si el texto no está comprimido, generalmente son pequeñas frases (¡ni siquiera necesariamente palabras completas!) Finamente entremezcladas con información de formato. No es muy amigable para stringso grep.
Jander
¿Puedes pensar en otra razón por la cual el uso de cadenas para esto no funcionaría? Descubrí que el uso de cadenas funciona en algunos archivos PDF pero no en otros.
regreso el
3
Eche un vistazo al recurso común grep tool crgrep que admite búsquedas dentro de archivos PDF.
También permite buscar otros recursos como contenido anidado en archivos, tablas de bases de datos, metadatos de imágenes, dependencias de archivos POM y recursos web, y combinaciones de estos, incluida la búsqueda recursiva.
¿Por qué demonios usas ls para poner nombres de archivo en los parámetros? No solo es más lento sino también una mala idea usar la lssalida como entrada para otros comandos . Solo pdfgrep 'pattern' *.pdfes suficiente
phuclv
1
Hay una pregunta duplicada en StackOverflow. La gente allí sugiere una variación de harish.venkarts responde:
La ventaja sobre la respuesta similar aquí es la --with-filenamebandera de grep. Esto es algo superior a pdfgrep también, porque el grep estándar tiene más características.
Supongo que quiere decir que tp no lo convierte en el disco, puede convertirlos stdouty luego grep pdftotext. Agitar el pdf sin ningún tipo de conversión no es un enfoque práctico, ya que PDFes principalmente un formato binario.
Además, debido a que algunos pdfson escaneos, primero deben ser OCR. Escribí una forma bastante simple de buscar todos los archivos PDF que no se pueden grepeditar y OCR.
Noté que si un pdfarchivo no tiene ninguna fuente, generalmente no se puede buscar. Entonces, sabiendo esto, podemos usarlo pdffonts.
Las primeras 2 líneas pdffontsson el encabezado de la tabla, por lo que cuando se puede buscar un archivo tiene más de dos líneas de salida, sabiendo esto podemos crear:
gedit check_pdf_searchable.sh
luego pegue esto
#!/bin/bash
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi
luego hazlo ejecutable
chmod +x check_pdf_searchable.sh
luego enumere todos los archivos PDF que no se pueden buscar en el directorio:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
Si solo desea buscar nombres / propiedades de pdf ... o cadenas simples que no están comprimidas o codificadas, en lugar de hacerlo strings, puede usar el siguiente
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
De 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
y cat --help:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
¡gpdf podría ser lo que necesitas si estás usando Gnome! Comprueba esto en caso de que no estés usando Gnome. Tiene una lista de lectores PDF de CLI. Entonces puedes usar greppara encontrar algún patrón.
Respuestas:
Instale el paquete
pdfgrep
, luego use el comando:——————
La forma más simple es
fuente
pdfgrep
También tiene una bandera recursiva. Así que esta respuesta tal vez podría reducirse a:pdfgrep -R pattern /path/
. Aunque podría ser menos efectivo si revisa todos los archivos, incluso si no es un PDF. Y noto que tiene problemas con caracteres internacionales como å, ä y ö.-n
opción es un profesional para pdfgrep, ya que permite incluir el número de página en la salida (puede ser útil para un procesamiento posterior).pattern
? ¿Qué es{}
? ¿Qué pasa con el '+'? No tengo idea desde la primera lectura ... así que supongo que voy a la página del manual.Si lo ha
poppler-utils
instalado (predeterminado en el escritorio de Ubuntu), puede "convertirlo" sobre la marcha y canalizarlo agrep
:Esto no creará un archivo .txt.
fuente
pdftotext
es el nombre de archivo en el que debe escribir. Sin embargo, por convención, las herramientas generalmente le permiten escribir enstdout
lugar de en un archivo especificando un-
lugar. Del mismo modo, algunas herramientas escribiríanstdout
de forma predeterminada si omite dicho argumento por completo (pero esto no siempre es posible sin crear ambigüedad).pdfgrep fue escrito exactamente para este propósito y está disponible en Ubuntu.
Intenta ser principalmente compatible
grep
y, por lo tanto, proporciona "el poder de grep", solo especializado para archivos PDF. Eso incluye opciones comunes de grep, como--recursive
,--ignore-case
o--color
.En contraste con
pdftotext | grep
, pdfgrep puede generar el número de página de una coincidencia de manera eficiente y generalmente es más rápido cuando no tiene que buscar en todo el documento (por ejemplo,--max-count
o--quiet
).El uso básico es:
donde
PATTERN
está su cadena de búsqueda yFILE
una lista de nombres de archivo (o comodines en un shell).Vea la página de manual para más información.
fuente
No.
Un pdf consta de fragmentos de datos, algunos de ellos de texto, algunos de imágenes y algunos de ellos realmente mágicos XYZ (por ejemplo, archivos .u3d). Esos trozos se comprimen la mayoría de las veces (p. Ej. Plano, consulte http://www.verypdf.com/pdfinfoeditor/compression.htm ). Con el fin de 'grep' un .pdf que tiene para revertir la compresión también conocido como extraer el texto.
Puede hacerlo ya sea por archivo con herramientas tales como
pdf2text
y grep el resultado, o ejecutar un 'paso a paso' (mira xapian.org o Lucene ), que construye un índice de búsqueda de los archivos .pdf y luego se puede usar la búsqueda herramientas del motor de ese indexador para obtener el contenido del pdf.Pero no, no puede
grep
archivos PDF y esperar respuestas confiables sin extraer primero el texto.fuente
pdfgrep
en cuenta que existe (ver arriba), un "no" plano es incorrecto.Recoll puede buscar archivos PDF. No admite expresiones regulares, pero tiene muchas otras opciones de búsqueda, por lo que puede satisfacer sus necesidades.
fuente
Puedes canalizarlo
strings
primero: -fuente
strings file.pdf | grep <...>
, no necesitacat
strings
ogrep
.Eche un vistazo al recurso común grep tool crgrep que admite búsquedas dentro de archivos PDF.
También permite buscar otros recursos como contenido anidado en archivos, tablas de bases de datos, metadatos de imágenes, dependencias de archivos POM y recursos web, y combinaciones de estos, incluida la búsqueda recursiva.
fuente
prueba esto
para imprimir las líneas el patrón ocurre dentro del pdf
fuente
cd a su carpeta que contiene su archivo pdf y luego ...
o si desea buscar en más de un solo archivo pdf (por ejemplo, en todos los archivos pdf de su carpeta)
o
fuente
ls
salida como entrada para otros comandos . Solopdfgrep 'pattern' *.pdf
es suficienteHay una pregunta duplicada en StackOverflow. La gente allí sugiere una variación de harish.venkarts responde:
La ventaja sobre la respuesta similar aquí es la
--with-filename
bandera de grep. Esto es algo superior a pdfgrep también, porque el grep estándar tiene más características.https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
fuente
Aquí hay una secuencia de comandos rápida para buscar pdf en el directorio actual:
fuente
Supongo que quiere decir que tp no lo convierte en el disco, puede convertirlos
stdout
y luego greppdftotext
. Agitar el pdf sin ningún tipo de conversión no es un enfoque práctico, ya quePDF
es principalmente un formato binario.En el directorio:
o en el directorio y sus subdirectorios:
Además, debido a que algunos
pdf
son escaneos, primero deben ser OCR. Escribí una forma bastante simple de buscar todos los archivos PDF que no se puedengrep
editar y OCR.Noté que si un
pdf
archivo no tiene ninguna fuente, generalmente no se puede buscar. Entonces, sabiendo esto, podemos usarlopdffonts
.Las primeras 2 líneas
pdffonts
son el encabezado de la tabla, por lo que cuando se puede buscar un archivo tiene más de dos líneas de salida, sabiendo esto podemos crear:luego pegue esto
luego hazlo ejecutable
luego enumere todos los archivos PDF que no se pueden buscar en el directorio:
o en el directorio y sus subdirectorios:
fuente
Si solo desea buscar nombres / propiedades de pdf ... o cadenas simples que no están comprimidas o codificadas, en lugar de hacerlo
strings
, puede usar el siguienteDe
grep --help
:y
cat --help
:fuente
¡gpdf podría ser lo que necesitas si estás usando Gnome! Comprueba esto en caso de que no estés usando Gnome. Tiene una lista de lectores PDF de CLI. Entonces puedes usar
grep
para encontrar algún patrón.fuente