Działa to również w systemie Mac OSX (Mavericks). Zainstaluj go za pomocą naparu. Prosty. Dzięki.
mikiemorales
7
Z ciekawości sprawdziłem źródło pdfgrep i używa popplera do wydobywania ciągów z pdf. Prawie dokładnie tak, jak odpowiedź @ wag tylko po prostu pagodise, a nie, prawdopodobnie, cały dokument.
Andrew Martin
4
pdfgrepma również flagę rekurencyjną. Więc to może być odpowiedź może być skrócony do: pdfgrep -R pattern /path/. Chociaż może być mniej skuteczny, jeśli przejdzie przez każdy plik, nawet jeśli nie jest to plik PDF. Zauważam, że ma problemy ze znakami międzynarodowymi, takimi jak å, ä i ö.
Rovanion
1
W rzeczywistości -nopcja ta jest pro dla pdfgrep, ponieważ pozwala dołączyć numer strony do wyniku (może być pomocny w dalszym przetwarzaniu).
JepZ
4
Ta odpowiedź byłaby łatwiejsza w użyciu, gdyby wyjaśniła, które bity polecenia mają zostać skopiowane dosłownie, a które to symbole zastępcze. Co jest pattern? Co jest {}? O co chodzi z `+`? Po pierwszym czytaniu nie mam pojęcia ... więc chyba idę do strony podręcznika.
Mark Amery
56
Jeśli masz poppler-utilszainstalowany (domyślnie na Ubuntu Desktop), możesz go „przekonwertować” w locie i potokować do grep:
więc ... wyodrębniasz tekst przed grepem, co oznacza, że odpowiedź brzmi „nie”.
akira
18
@akira OP prawdopodobnie oznaczało „bez otwierania pliku PDF w przeglądarce i eksportowania do tekstu”
Michael Mrozek
5
@akira Gdzie widzisz „tylko grep”?
Michael Mrozek
6
@akira Cóż, już powiedziałem, co myślę, że prawdopodobnie miał na myśli; nie chce eksportować do tekstu przed przetworzeniem. Bardzo wątpię, aby miał problem z dowolnym poleceniem, które konwertuje na tekst w jakikolwiek sposób; nie ma powodu, aby tego nie
robić
2
@ sherrellbc Drugim argumentem pdftotextjest nazwa pliku, do którego powinien zapisać. Jednak, zgodnie z konwencją, narzędzia zazwyczaj pozwalają na pisanie do stdoutpliku zamiast do pliku poprzez podanie -zamiast niego. Podobnie niektóre narzędzia zapisują stdoutdomyślnie, jeśli całkowicie pominie się taki argument (ale nie zawsze jest to możliwe bez tworzenia niejednoznaczności).
Joost
11
pdfgrep został napisany właśnie w tym celu i jest dostępny w Ubuntu.
Stara się być w większości kompatybilny, grepa tym samym zapewnia „moc grep”, specjalizującą się tylko w plikach PDF. Która obejmuje wspólne opcje grep, takie jak --recursive, --ignore-caselub --color.
W przeciwieństwie do pdftotext | greppdfgrep może wypisać numer strony dopasowania w wydajny sposób i generalnie jest szybszy, gdy nie musi przeszukiwać całego dokumentu (np. --max-countLub --quiet).
Podstawowym zastosowaniem jest:
pdfgrep PATTERN FILE..
gdzie PATTERNjest szukany ciąg i FILElista nazw plików (lub symboli wieloznacznych w powłoce).
Plik pdf składa się z fragmentów danych, niektórych tekstów, niektórych zdjęć, a niektóre naprawdę magicznych, fantazyjnych XYZ (np. Plików .u3d). Te fragmenty są w większości skompresowane (np. Płaskie, sprawdź http://www.verypdf.com/pdfinfoeditor/compression.htm ). Aby „grep” .pdf trzeba odwrócić kompresję, czyli wyodrębnić tekst.
Możesz to zrobić albo dla każdego pliku za pomocą narzędzi, takich jak pdf2texti grep, lub uruchomić „indeksator” (spójrz na xapian.org lub lucene ), który buduje indeks z plików pdf do przeszukiwania, a następnie możesz użyć wyszukiwania narzędzia silnikowe tego indeksatora, aby uzyskać zawartość pliku pdf.
Ale nie, nie można greppdfować plików i mieć nadzieję na wiarygodne odpowiedzi bez uprzedniego wyodrębnienia tekstu.
Po prostu użyj strings file.pdf | grep <...>, nie potrzebujeszcat
phunehehe
Tak - wydaje mi się, że mój umysł lepiej działa ze strumieniami: :-)
Andy Smith
12
nie zadziała, jeśli tekst jest skompresowany, co jest przez większość czasu.
akira
6
Nawet jeśli tekst nie jest skompresowany, to na ogół małe fragmenty zdań (niekoniecznie całe słowa!) Drobno zmieszane z informacjami o formatowaniu. Niezbyt przyjazny dla stringslub grep.
Jander
Czy możesz wymyślić inny powód, dla którego użycie ciągów do tego nie zadziałałoby? Odkryłem, że używanie ciągów działa na niektórych plikach PDF, ale nie na innych.
hourback
3
Spójrz na wspólne narzędzie crgrep grep zasobów, które obsługuje wyszukiwanie w plikach PDF.
Umożliwia także wyszukiwanie innych zasobów, takich jak zawartość zagnieżdżona w archiwach, tabele bazy danych, metadane obrazu, zależności plików POM i zasoby sieciowe - oraz ich kombinacje, w tym wyszukiwanie rekurencyjne.
Zakładam, że masz na myśli, że tp nie konwertuje go na dysk, możesz przekonwertować je na, stdouta następnie grep go pdftotext. Grepowanie pdf bez jakiejkolwiek konwersji nie jest praktycznym podejściem, ponieważ PDFjest to głównie format binarny.
Ponieważ niektóre pdfsą skanami, najpierw należy je OCRed. Napisałem dość prosty sposób na przeszukiwanie wszystkich plików PDF, których nie można grepedytować i ich OCR.
Zauważyłem, że jeśli pdfplik nie ma żadnej czcionki, zwykle nie można go przeszukiwać. Wiedząc o tym, możemy skorzystać pdffonts.
Pierwsze 2 wiersze pdffontsnagłówka tabeli, więc gdy plik do przeszukiwania ma więcej niż dwa wiersze, wiedząc, że możemy to utworzyć:
gedit check_pdf_searchable.sh
następnie wklej to
#!/bin/bash
#set -vx
if ((`pdffonts "$1" | wc -l` < 3 )); then
echo $1
pypdfocr "$1"
fi
następnie uczyń go wykonywalnym
chmod +x check_pdf_searchable.sh
następnie wypisz wszystkie nieprzeszukiwalne pliki pdf w katalogu:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
Jeśli chcesz po prostu wyszukać nazwy / właściwości pdf ... lub proste ciągi, które nie są kompresowane ani kodowane, zamiast tego stringsmożesz użyć poniższych
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
Od 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
i cat --help:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
gpdf może być tym, czego potrzebujesz, jeśli używasz Gnome! Zaznacz to, jeśli nie używasz Gnome. Ma listę przeglądarek pdf CLI. Następnie możesz użyć, grepaby znaleźć wzór.
Odpowiedzi:
Zainstaluj pakiet
pdfgrep
, a następnie użyj polecenia:——————
Najprościej jest
źródło
pdfgrep
ma również flagę rekurencyjną. Więc to może być odpowiedź może być skrócony do:pdfgrep -R pattern /path/
. Chociaż może być mniej skuteczny, jeśli przejdzie przez każdy plik, nawet jeśli nie jest to plik PDF. Zauważam, że ma problemy ze znakami międzynarodowymi, takimi jak å, ä i ö.-n
opcja ta jest pro dla pdfgrep, ponieważ pozwala dołączyć numer strony do wyniku (może być pomocny w dalszym przetwarzaniu).pattern
? Co jest{}
? O co chodzi z `+`? Po pierwszym czytaniu nie mam pojęcia ... więc chyba idę do strony podręcznika.Jeśli masz
poppler-utils
zainstalowany (domyślnie na Ubuntu Desktop), możesz go „przekonwertować” w locie i potokować dogrep
:To nie utworzy pliku .txt.
źródło
pdftotext
jest nazwa pliku, do którego powinien zapisać. Jednak, zgodnie z konwencją, narzędzia zazwyczaj pozwalają na pisanie dostdout
pliku zamiast do pliku poprzez podanie-
zamiast niego. Podobnie niektóre narzędzia zapisująstdout
domyślnie, jeśli całkowicie pominie się taki argument (ale nie zawsze jest to możliwe bez tworzenia niejednoznaczności).pdfgrep został napisany właśnie w tym celu i jest dostępny w Ubuntu.
Stara się być w większości kompatybilny,
grep
a tym samym zapewnia „moc grep”, specjalizującą się tylko w plikach PDF. Która obejmuje wspólne opcje grep, takie jak--recursive
,--ignore-case
lub--color
.W przeciwieństwie do
pdftotext | grep
pdfgrep może wypisać numer strony dopasowania w wydajny sposób i generalnie jest szybszy, gdy nie musi przeszukiwać całego dokumentu (np.--max-count
Lub--quiet
).Podstawowym zastosowaniem jest:
gdzie
PATTERN
jest szukany ciąg iFILE
lista nazw plików (lub symboli wieloznacznych w powłoce).Zobacz manpage cej informacje o.
źródło
Nie.
Plik pdf składa się z fragmentów danych, niektórych tekstów, niektórych zdjęć, a niektóre naprawdę magicznych, fantazyjnych XYZ (np. Plików .u3d). Te fragmenty są w większości skompresowane (np. Płaskie, sprawdź http://www.verypdf.com/pdfinfoeditor/compression.htm ). Aby „grep” .pdf trzeba odwrócić kompresję, czyli wyodrębnić tekst.
Możesz to zrobić albo dla każdego pliku za pomocą narzędzi, takich jak
pdf2text
i grep, lub uruchomić „indeksator” (spójrz na xapian.org lub lucene ), który buduje indeks z plików pdf do przeszukiwania, a następnie możesz użyć wyszukiwania narzędzia silnikowe tego indeksatora, aby uzyskać zawartość pliku pdf.Ale nie, nie można
grep
pdfować plików i mieć nadzieję na wiarygodne odpowiedzi bez uprzedniego wyodrębnienia tekstu.źródło
pdfgrep
istnieje (patrz wyżej), płaskie „nie” jest nieprawidłowe.Recoll może wyszukiwać pliki PDF. Nie obsługuje wyrażeń regularnych, ale ma wiele innych opcji wyszukiwania, więc może pasować do twoich potrzeb.
źródło
Możesz
strings
najpierw przepuścić przez : -źródło
strings file.pdf | grep <...>
, nie potrzebujeszcat
strings
lubgrep
.Spójrz na wspólne narzędzie crgrep grep zasobów, które obsługuje wyszukiwanie w plikach PDF.
Umożliwia także wyszukiwanie innych zasobów, takich jak zawartość zagnieżdżona w archiwach, tabele bazy danych, metadane obrazu, zależności plików POM i zasoby sieciowe - oraz ich kombinacje, w tym wyszukiwanie rekurencyjne.
źródło
Spróbuj tego
do drukowania linii wzór pojawia się w pliku pdf
źródło
cd do twojego folderu zawierającego plik pdf, a następnie ...
lub jeśli chcesz wyszukać więcej niż jeden plik pdf (np. we wszystkich plikach pdf w swoim folderze)
lub
źródło
ls
danych wyjściowych jako danych wejściowych do innych poleceń jest nie tylko wolniejsze, ale również złym pomysłem . Po prostupdfgrep 'pattern' *.pdf
wystarczyW StackOverflow istnieje zduplikowane pytanie. Ludzie tam sugerują odmianę harish.venkarts odpowiedzi:
Przewagą nad podobną odpowiedzią jest
--with-filename
flaga grep. Jest to nieco lepsze niż pdfgrep, ponieważ standardowy grep ma więcej funkcji.https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
źródło
Oto krótki skrypt do wyszukiwania pdf w bieżącym katalogu:
źródło
Zakładam, że masz na myśli, że tp nie konwertuje go na dysk, możesz przekonwertować je na,
stdout
a następnie grep gopdftotext
. Grepowanie pdf bez jakiejkolwiek konwersji nie jest praktycznym podejściem, ponieważPDF
jest to głównie format binarny.W katalogu:
lub w katalogu i jego podkatalogach:
Ponieważ niektóre
pdf
są skanami, najpierw należy je OCRed. Napisałem dość prosty sposób na przeszukiwanie wszystkich plików PDF, których nie możnagrep
edytować i ich OCR.Zauważyłem, że jeśli
pdf
plik nie ma żadnej czcionki, zwykle nie można go przeszukiwać. Wiedząc o tym, możemy skorzystaćpdffonts
.Pierwsze 2 wiersze
pdffonts
nagłówka tabeli, więc gdy plik do przeszukiwania ma więcej niż dwa wiersze, wiedząc, że możemy to utworzyć:następnie wklej to
następnie uczyń go wykonywalnym
następnie wypisz wszystkie nieprzeszukiwalne pliki pdf w katalogu:
lub w katalogu i jego podkatalogach:
źródło
Jeśli chcesz po prostu wyszukać nazwy / właściwości pdf ... lub proste ciągi, które nie są kompresowane ani kodowane, zamiast tego
strings
możesz użyć poniższychOd
grep --help
:i
cat --help
:źródło
gpdf może być tym, czego potrzebujesz, jeśli używasz Gnome! Zaznacz to, jeśli nie używasz Gnome. Ma listę przeglądarek pdf CLI. Następnie możesz użyć,
grep
aby znaleźć wzór.źródło