Ini berfungsi di mac osx (Mavericks) juga. Instal menggunakan minuman. Sederhana. Terima kasih.
mikiemorales
7
Karena penasaran saya memeriksa sumber pdfgrep dan menggunakan poppler untuk mengekstraksi string dari pdf. Hampir persis seperti jawaban @ mengibaskan hanya mengoceh bukan, mungkin, seluruh dokumen.
Andrew Martin
4
pdfgrepjuga memiliki bendera rekursif. Jadi jawaban ini mungkin dapat dikurangi menjadi: pdfgrep -R pattern /path/. Meskipun mungkin kurang efektif jika melewati setiap file bahkan jika itu bukan PDF. Dan saya perhatikan ada masalah dengan karakter internasional seperti å, ä dan ö.
Rovanion
1
Sebenarnya, -nopsi ini adalah pro untuk pdfgrep karena memungkinkan untuk memasukkan nomor halaman dalam output (mungkin membantu untuk diproses lebih lanjut).
JepZ
4
Jawaban ini akan lebih mudah digunakan jika itu menjelaskan bagian-bagian mana dari perintah yang dimaksudkan untuk disalin secara harfiah dan mana yang merupakan tempat penampung. Apa pattern? Apa {}? Ada apa dengan `+`? Saya tidak tahu setelah membaca pertama ... jadi saya pergi ke halaman manual, saya kira.
Mark Amery
56
Jika Anda telah poppler-utilsmenginstal (default pada Desktop Ubuntu), Anda dapat "mengubahnya" dengan cepat dan mengirimkannya ke grep:
jadi .. Anda mengekstrak teks sebelum Anda menerimanya yang artinya jawabannya adalah "tidak".
akira
18
@akira OP mungkin berarti "tanpa membuka PDF di penampil dan mengekspor ke teks"
Michael Mrozek
5
@ Akira Di mana Anda melihat "hanya grep"?
Michael Mrozek
6
@ Akira Yah, saya sudah mengatakan apa yang saya pikir dia maksud; dia tidak ingin mengekspor ke teks sebelum memprosesnya. Saya sangat meragukan dia memiliki masalah dengan perintah apa pun yang dikonversi ke teks dengan cara apa pun; tidak ada alasan untuk tidak
Michael Mrozek
2
@sherrellbc Argumen kedua pdftotextadalah nama file yang harus ditulis. Namun, berdasarkan konvensi, alat biasanya memungkinkan Anda untuk menulis stdoutalih-alih ke file dengan menentukan -sebaliknya. Demikian pula, beberapa alat akan menulis stdoutsecara default jika Anda menghilangkan argumen seperti itu sepenuhnya (tapi ini tidak selalu mungkin tanpa menciptakan ambiguitas).
Joost
12
pdfgrep ditulis untuk tujuan ini dan tersedia di Ubuntu.
Sebagian besar mencoba untuk kompatibel grepdan dengan demikian memberikan "kekuatan grep", hanya khusus untuk PDF. Itu termasuk opsi grep umum, seperti --recursive, --ignore-caseatau --color.
Berbeda dengan pdftotext | grep, pdfgrep dapat menampilkan jumlah halaman yang cocok dengan performa yang baik dan umumnya lebih cepat ketika tidak harus mencari seluruh dokumen (misalnya --max-countatau --quiet).
Penggunaan dasar adalah:
pdfgrep PATTERN FILE..
di mana PATTERNstring pencarian Anda dan FILEdaftar nama file (atau wildcard di shell).
Pdf terdiri dari potongan-potongan data, beberapa di antaranya teks, beberapa di antaranya gambar dan beberapa di antaranya benar-benar ajaib XYZ (mis. File .u3d). Potongan-potongan itu sebagian besar terkompresi (mis. Flat, periksa http://www.verypdf.com/pdfinfoeditor/compression.htm ). Untuk 'grep' .pdf Anda harus membalikkan kompresi alias mengekstrak teks.
Anda dapat melakukannya per file dengan alat seperti pdf2textdan ambil hasilnya, atau Anda menjalankan 'pengindeks' (lihat xapian.org atau lucene ) yang membangun indeks yang dapat dicari dari file .pdf Anda dan kemudian Anda dapat menggunakan pencarian alat mesin pengindeks itu untuk mendapatkan konten pdf
Tapi tidak, Anda tidak bisa grepfile pdf dan berharap jawaban yang dapat diandalkan tanpa mengekstraksi teks terlebih dahulu.
Cukup gunakan strings file.pdf | grep <...>, Anda tidak perlucat
phunehehe
Ya - pikiran saya tampaknya bekerja lebih baik dengan aliran ... :-)
Andy Smith
12
tidak akan berfungsi jika teks dikompresi, yang merupakan sebagian besar waktu.
akira
6
Bahkan jika teksnya tidak terkompresi, umumnya kalimat-kalimat kecil (bahkan belum tentu seluruh kata!) Dicampur dengan informasi format. Tidak terlalu ramah untuk stringsatau grep.
Jander
Bisakah Anda memikirkan alasan lain mengapa menggunakan string untuk ini tidak akan berhasil? Saya menemukan bahwa menggunakan string berfungsi pada beberapa PDF tetapi tidak pada yang lain.
pasir
3
Lihatlah crgrep alat sumber daya umum yang mendukung pencarian dalam file PDF.
Hal ini juga memungkinkan pencarian sumber daya lain seperti konten yang bersarang di arsip, tabel database, meta-data gambar, dependensi file POM dan sumber daya web - dan kombinasi dari ini termasuk pencarian rekursif.
mengapa Anda menggunakan ls untuk meletakkan nama file di parameter? Bukan hanya lebih lambat tetapi juga ide buruk untuk menggunakan lsoutput sebagai input ke perintah lain . Cukup pdfgrep 'pattern' *.pdfsudah
phuclv
1
Ada pertanyaan duplikat di StackOverflow. Orang-orang di sana menyarankan variasi jawaban harish.venkarts:
Keuntungan dari jawaban serupa di sini adalah --with-filenamebendera untuk grep. Ini agak lebih unggul daripada pdfgrep juga, karena grep standar memiliki lebih banyak fitur.
Saya berasumsi maksud Anda tp tidak mengubahnya pada disk, Anda dapat mengubahnya stdoutdan kemudian menerimanya dengan pdftotext. Memegang pdf tanpa konversi apa pun bukanlah pendekatan praktis karena PDFsebagian besar merupakan format biner.
Juga karena beberapa pdfscan, mereka perlu OCR terlebih dahulu. Saya menulis cara yang cukup sederhana untuk mencari semua pdf yang tidak dapat grepdiedit dan OCR mereka.
Saya perhatikan jika pdffile tidak memiliki font apa pun biasanya tidak dapat dicari. Jadi mengetahui ini bisa kita gunakan pdffonts.
2 baris pertama pdffontsadalah header tabel, jadi ketika sebuah file dapat dicari memiliki lebih dari dua output baris, dengan mengetahui hal ini kita dapat membuat:
gedit check_pdf_searchable.sh
lalu tempel ini
#!/bin/bash
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi
kemudian membuatnya bisa dieksekusi
chmod +x check_pdf_searchable.sh
kemudian daftarkan semua pdf yang tidak dapat dicari di direktori:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
Jika Anda hanya ingin mencari nama / properti pdf ... atau string sederhana yang tidak dikompresi atau disandikan maka alih-alih stringsAnda dapat menggunakan di bawah ini
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
Dari 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
dan cat --help:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
gpdf mungkin yang Anda butuhkan jika Anda menggunakan Gnome! Periksa ini jika Anda tidak menggunakan Gnome. Itu punya daftar pemirsa pdf CLI. Kemudian Anda dapat menggunakan grepuntuk menemukan beberapa pola.
Jawaban:
Instal paket
pdfgrep
, lalu gunakan perintah:——————
Cara paling sederhana adalah
sumber
pdfgrep
juga memiliki bendera rekursif. Jadi jawaban ini mungkin dapat dikurangi menjadi:pdfgrep -R pattern /path/
. Meskipun mungkin kurang efektif jika melewati setiap file bahkan jika itu bukan PDF. Dan saya perhatikan ada masalah dengan karakter internasional seperti å, ä dan ö.-n
opsi ini adalah pro untuk pdfgrep karena memungkinkan untuk memasukkan nomor halaman dalam output (mungkin membantu untuk diproses lebih lanjut).pattern
? Apa{}
? Ada apa dengan `+`? Saya tidak tahu setelah membaca pertama ... jadi saya pergi ke halaman manual, saya kira.Jika Anda telah
poppler-utils
menginstal (default pada Desktop Ubuntu), Anda dapat "mengubahnya" dengan cepat dan mengirimkannya kegrep
:Ini tidak akan membuat file .txt.
sumber
pdftotext
adalah nama file yang harus ditulis. Namun, berdasarkan konvensi, alat biasanya memungkinkan Anda untuk menulisstdout
alih-alih ke file dengan menentukan-
sebaliknya. Demikian pula, beberapa alat akan menulisstdout
secara default jika Anda menghilangkan argumen seperti itu sepenuhnya (tapi ini tidak selalu mungkin tanpa menciptakan ambiguitas).pdfgrep ditulis untuk tujuan ini dan tersedia di Ubuntu.
Sebagian besar mencoba untuk kompatibel
grep
dan dengan demikian memberikan "kekuatan grep", hanya khusus untuk PDF. Itu termasuk opsi grep umum, seperti--recursive
,--ignore-case
atau--color
.Berbeda dengan
pdftotext | grep
, pdfgrep dapat menampilkan jumlah halaman yang cocok dengan performa yang baik dan umumnya lebih cepat ketika tidak harus mencari seluruh dokumen (misalnya--max-count
atau--quiet
).Penggunaan dasar adalah:
di mana
PATTERN
string pencarian Anda danFILE
daftar nama file (atau wildcard di shell).Lihat halaman manual untuk info lebih lanjut.
sumber
Tidak.
Pdf terdiri dari potongan-potongan data, beberapa di antaranya teks, beberapa di antaranya gambar dan beberapa di antaranya benar-benar ajaib XYZ (mis. File .u3d). Potongan-potongan itu sebagian besar terkompresi (mis. Flat, periksa http://www.verypdf.com/pdfinfoeditor/compression.htm ). Untuk 'grep' .pdf Anda harus membalikkan kompresi alias mengekstrak teks.
Anda dapat melakukannya per file dengan alat seperti
pdf2text
dan ambil hasilnya, atau Anda menjalankan 'pengindeks' (lihat xapian.org atau lucene ) yang membangun indeks yang dapat dicari dari file .pdf Anda dan kemudian Anda dapat menggunakan pencarian alat mesin pengindeks itu untuk mendapatkan konten pdfTapi tidak, Anda tidak bisa
grep
file pdf dan berharap jawaban yang dapat diandalkan tanpa mengekstraksi teks terlebih dahulu.sumber
pdfgrep
ada (lihat di atas), sebuah flat "tidak" tidak benar.Recoll dapat mencari PDF. Ini tidak mendukung ekspresi reguler, tetapi memiliki banyak opsi pencarian lain, jadi mungkin sesuai dengan kebutuhan Anda.
sumber
Anda dapat menyalurkan melalui
strings
:sumber
strings file.pdf | grep <...>
, Anda tidak perlucat
strings
ataugrep
.Lihatlah crgrep alat sumber daya umum yang mendukung pencarian dalam file PDF.
Hal ini juga memungkinkan pencarian sumber daya lain seperti konten yang bersarang di arsip, tabel database, meta-data gambar, dependensi file POM dan sumber daya web - dan kombinasi dari ini termasuk pencarian rekursif.
sumber
coba ini
untuk mencetak garis, polanya muncul di dalam pdf
sumber
cd ke folder Anda yang berisi file pdf Anda dan kemudian ..
atau jika Anda ingin mencari lebih dari satu file pdf (mis. di semua file pdf di folder Anda)
atau
sumber
ls
output sebagai input ke perintah lain . Cukuppdfgrep 'pattern' *.pdf
sudahAda pertanyaan duplikat di StackOverflow. Orang-orang di sana menyarankan variasi jawaban harish.venkarts:
Keuntungan dari jawaban serupa di sini adalah
--with-filename
bendera untuk grep. Ini agak lebih unggul daripada pdfgrep juga, karena grep standar memiliki lebih banyak fitur.https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
sumber
Berikut ini adalah skrip cepat untuk mencari pdf di direktori saat ini:
sumber
Saya berasumsi maksud Anda tp tidak mengubahnya pada disk, Anda dapat mengubahnya
stdout
dan kemudian menerimanya denganpdftotext
. Memegang pdf tanpa konversi apa pun bukanlah pendekatan praktis karenaPDF
sebagian besar merupakan format biner.Dalam direktori:
atau dalam direktori dan subdirektori-nya:
Juga karena beberapa
pdf
scan, mereka perlu OCR terlebih dahulu. Saya menulis cara yang cukup sederhana untuk mencari semua pdf yang tidak dapatgrep
diedit dan OCR mereka.Saya perhatikan jika
pdf
file tidak memiliki font apa pun biasanya tidak dapat dicari. Jadi mengetahui ini bisa kita gunakanpdffonts
.2 baris pertama
pdffonts
adalah header tabel, jadi ketika sebuah file dapat dicari memiliki lebih dari dua output baris, dengan mengetahui hal ini kita dapat membuat:lalu tempel ini
kemudian membuatnya bisa dieksekusi
kemudian daftarkan semua pdf yang tidak dapat dicari di direktori:
atau dalam direktori dan subdirektori-nya:
sumber
Jika Anda hanya ingin mencari nama / properti pdf ... atau string sederhana yang tidak dikompresi atau disandikan maka alih-alih
strings
Anda dapat menggunakan di bawah iniDari
grep --help
:dan
cat --help
:sumber
gpdf mungkin yang Anda butuhkan jika Anda menggunakan Gnome! Periksa ini jika Anda tidak menggunakan Gnome. Itu punya daftar pemirsa pdf CLI. Kemudian Anda dapat menggunakan
grep
untuk menemukan beberapa pola.sumber