Van-e mód a PDF fájlok keresésére a grep segítségével, anélkül, hogy először szöveggé konvertálnánk az Ubuntuban?
Megjegyzések
- Lásd még: Van valamiféle PDF-szöveg-konvertáló? és Parancssori eszköz a kifejezések nagyszámú pdf-fájlban történő keresésére .
- Azok számára, akik kereséssel jutnak ide: Ha hajlandó először szöveges fájlokká konvertálni, akkor nézd meg a Hogyan kereshet több pdf fájl tartalmában?
Válasz
Telepítse az pdfgrep
csomagot, majd használja a következő parancsot:
find /path -iname "*.pdf" -exec pdfgrep pattern {} +
—— ————
Ennek legegyszerűbb módja:
pdfgrep "pattern" *.pdf pdfgrep "pattern" file.pdf
Megjegyzések
- Ez Mac OSX-ben (Mavericks) is működik. Telepítse a sör használatával. Egyszerű. Köszönöm.
- Kíváncsiságból megnéztem a pdfgrep forrását, és a poppler segítségével vonja ki a karakterláncokat a pdf-ből. Szinte pontosan úgy, ahogy a @wag ‘ válaszok csak oldalanként válaszolnak, nem pedig feltehetően a teljes dokumentumra.
-
pdfgrep
rekurzív zászlóval rendelkezik. Tehát ez a válasz talán a következőre redukálható:pdfgrep -R pattern /path/
. Bár kevésbé hatékony, ha minden fájlt átmegy akkor is, ha ez nem ‘ t PDF. És azt veszem észre, hogy problémái vannak a nemzetközi karakterekkel, például å, ä és ö . - Valójában a
-n
opció a pdfgrep számára profi, mivel lehetővé teszi az oldalszám felvételét a kimenetbe (hasznos lehet a további feldolgozáshoz). - Ezt a választ könnyebben lehetne használni, ha elmagyarázná, hogy a parancs mely bitjeit hivatott szó szerint másolni, és melyek helyőrzők. Mi ‘ s
pattern
? Mi ‘ s{}
? Mi van ‘ a “+” -val? Fogalmam sincs az első olvasás során … feltételezem, hogy a felkeresett oldalra.
Válasz
Ha poppler-utils
telepítve van (alapértelmezés szerint az Ubuntu asztalon), akkor menet közben “konvertálhatja” és átcsaphatja grep
:
pdftotext my.pdf - | grep "pattern"
Ez nem hoz létre .txt fájlt.
Megjegyzések
- így .. kivonja a szöveget, mielőtt megkapná, ami azt jelenti, hogy a válasz ” nem “.
- @akira Az OP valószínűleg ” -et jelentett anélkül, hogy megnyitotta volna a PDF-t a nézőben, és exportálta volna a szövegbe ”
- @akira Hol látod ” grep only “?
- @akira Nos, már elmondtam, amit gondolok valószínűleg gondolta; nem akar ‘ exportálni szöveggé, mielőtt feldolgozná. Nagyon kétlem, hogy problémája lenne bármelyik paranccsal, bármilyen módon szöveggé változik; ‘ nincs ok arra, hogy ne
- @sherrellbc A
pdftotext
második argumentuma a fájlnév, amelyet írnia kell . Megállapodás szerint azonban az eszközök általában lehetővé teszik, hogy fájl helyett astdout
fájlba írjon, helyette egy-
fájlt megadva. Hasonlóképpen, egyes eszközök alapértelmezés szerint astdout
címre írnának, ha teljesen mellőznek egy ilyen argumentumot (de ez nem mindig lehetséges kétértelműség létrehozása nélkül).
Válasz
pdfgrep pontosan erre a célra íródott, és elérhető az Ubuntuban.
Megpróbálja többnyire kompatibilis lenni a grep
és így a “grep erejét” biztosítja, csak a PDF-fájlokra szakosodva. Ez magában foglalja a szokásos grep opciókat, például --recursive
, --ignore-case
vagy --color
.
A pdftotext | grep
-vel ellentétben a pdfgrep előadásszerűen képes megjeleníteni a mérkőzés oldalszámát, és általában gyorsabb, ha nem kell a teljes dokumentumot keresnie (pl. --max-count
vagy --quiet
).
Az alaphasználat:
pdfgrep PATTERN FILE..
ahol PATTERN
a keresési karakterlánc és FILE
a fájlnevek (vagy a héjban található helyettesítő karakterek) listája.
További információért olvassa el a manpult .
Válasz
Nem.
A pdf adatdarabokból áll, némelyik szöveges, némelyik képi és némelyik valóban varázslatos fantázianevű XYZ (pl. .u3d fájlok). a darabokat a legtöbbször tömörítik (pl. laposak, ellenőrizze http://www.verypdf.com/pdfinfoeditor/compression.htm ). Annak érdekében, hogy . pdf van a tömörítés megfordításához, más néven a szöveg kibontásához.
Ezt fájlonként megteheti olyan eszközökkel, mint a pdf2text
, és megragadja az eredményt, vagy futtat egy “indexelőt” (nézze meg a xapian.org vagy lucene ), amelyek kereshető indexet építenek a .pdf fájlokból, majd használhatja a az indexelő keresőmotorjai a pdf tartalmának megszerzéséhez.
De nem, nem tudsz grep
pdf fájlokat remélni, és megbízható válaszokra számíthatsz a szöveg kibontása nélkül. először.
Megjegyzések
- Figyelembe véve az
pdfgrep
létezését (lásd fent), egy lapos ” no ” helytelen. - @JonathanCross, figyelembe véve a kérdést: ” a grep erejét használva, anélkül, hogy először szöveggé konvertálnánk “, egy lapos ” no ” helyes helyes.
Válasz
Recoll kereshet PDF-fájlokban. Nem támogatja a reguláris kifejezéseket, de rengeteg más keresési opcióval rendelkezik, ezért megfelelhet az Ön igényeinek.
Válasz
Van egy duplikált kérdés a StackOverflow-n. Az ott tartózkodó emberek a harish.venkarts válasz variációját javasolják:
find /path -name "*.pdf" -exec sh -c "pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"" \;
Az itt található hasonló válasz előnye a --with-filename
zászló a grep számára. Ez némileg felülmúlja a pdfgrep-et is, mert a standard grep több funkcióval rendelkezik.
https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
Megjegyzések
- Szerintem jobb lett volna ezt elhagyni megjegyzésként (vagy szerkesztésként) az Ön által hivatkozott hasonló válaszban.
Válasz
Vessen egy pillantást a közös erőforrás grep eszközén crgrep , amely támogatja a PDF fájlokban történő keresést.
Ez lehetővé teszi más erőforrások, például archívumokban, adatbázisban beágyazott tartalmak keresését is táblázatok , kép metaadatok, POM fájlfüggőségek és webes erőforrások – és ezek kombinációi, ideértve a rekurzív keresést is.
Válasz
csövezd át először strings
: –
cat file.pdf | strings | grep <...etc...>
megjegyzések
- Csak a
strings file.pdf | grep <...>
parancsot használja, nem kell ‘ szükségecat
- Igen – úgy tűnik, hogy az agyam jobban működik a folyamokkal … 🙂
- nem működik, ha a szöveget tömörítik, ami a legtöbbször megtörténik.
- Még akkor is, ha a szöveg nincs tömörítve, ‘ általában apró mondatrészeket (nem is feltétlenül egész szavakat!) finoman összekevernek a formázási információkkal. Nem túl barátságos a
strings
vagy agrep
számára. - Gondolhat még egy okot arra, hogy miért használjon húrokat ehhez div id = “c0769237ba”>
működik? Megállapítottam, hogy a karakterláncok használata egyes PDF-fájlokon működik, másokon viszont nem.
Válasz
próbáld ki ezt
find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \ pdftotext "$i" - | grep pattern; done
a vonalak kinyomtatásához a minta a pdf-ben található
Válasz
Itt található egy gyors szkript a kereséshez pdf-ben az aktuális könyvtárban:
#!/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" \;
Hozzászólások
- Nem tudom ezt szerkeszteni, mivel kevés vagyok: A keresési meghívásban szereplő
$1
-t idézni kell, különben ez nem fog ‘ működni a kereséssel kifejezések szóközökkel. - @ankon kijavította 🙂
Válasz
cd a mappád, amely tartalmazza a pdf-fájlt, majd ..
pdfgrep "pattern" your.pdf
vagy ha egynél több pdf-fájlban akarsz keresni (pl. az összes pdf- fájlok a mappában)
pdfgrep "pattern" `ls *.pdf`
vagy
pdfgrep "pattern" $(ls *.pdf)
megjegyzések
- miért a földön használod az ls fájlneveket paraméterekbe? ‘ nemcsak lassabb, hanem rossz ötlet is, hogy
ls
kimenetet használjon a bemenetet más parancsokba . Csakpdfgrep 'pattern' *.pdf
elég - @phuclv Téved. A
pdfgrep 'pattern' *.pdf
nem fog működni. - @ f0nzie ‘ téved. A
$(ls *.pdf)
majdnem pontosan megegyezik a*.pdf
-vel, csak rosszabb, mert különleges a fájlok nincsenek idézőjelben védve
Válasz
Feltételezem, hogy azt érted, hogy a tp nem konvertálja a lemezre, konvertálhatja őket stdout
-re, majd a pdftotext
paranccsal megfoghatja. A PDF konvertálása bármilyen átalakítás nélkül nem praktikus megközelítés, mivel a PDF
többnyire bináris formátum.
A könyvtárban:
ls -1 ./*.pdf | xargs -L1 -I {} pdftotext {} - | grep "keyword"
vagy a könyvtárban és annak alkönyvtáraiban:
tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftotext {} - | grep "keyword"
Azért is, mert néhány pdf
olyan vizsgálat, amelyeket először OCR-rel kell ellátniuk. Írtam egy nagyon egyszerű módszert az összes olyan pdf-fájl keresésére, amelyet nem lehet grep
szerkeszteni, és OCR-t.
Észrevettem, hogy egy A / div> fájlban nincs betűkészlet, általában nem lehet keresni. Tehát ennek ismeretében használhatjuk a pdffonts
-t.
A pdffonts
a táblázat fejléce, tehát amikor egy fájl kereshető, kettőnél több soros kimenettel rendelkezik, ennek tudatában létrehozhatunk:
gedit check_pdf_searchable.sh
majd illessze be ezt
#!/bin/bash #set -vx if ((`pdffonts "$1" | wc -l` < 3 )); then echo $1 pypdfocr "$1" fi
majd futtathatóvá tegye
chmod +x check_pdf_searchable.sh
, majd sorolja fel az összeset nem kereshető pdf-ek a könyvtárban:
ls -1 ./*.pdf | xargs -L1 -I {} ./check_pdf_searchable.sh {}
vagy a könyvtárban és annak alkönyvtáraiban:
tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} ./check_pdf_searchable.sh {}
Válasz
Ha csak pdf neveket / tulajdonságokat szeretne keresni … vagy egyszerű karakterláncokat, amelyek nincsenek tömörítve vagy kódolva, akkor strings
az alábbiakat használhatja
grep -a STRING file.pdf cat -v file.pdf | grep STRING
From 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
és cat --help
:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
Válasz
A gpome lehet, amire szüksége van, ha Gnome-ot használ ! Ellenőrizze ezt , ha nem használja a Gnome-ot. Megvan a CLI pdf nézők listája. Ezután a grep
segítségével megkereshet néhány mintát.
Válasz
pdfgrep -r --include "*.pdf" -i "pattern"
Megjegyzések
- Üdvözöljük a webhelyen, és köszönöm Ön a hozzájárulásáért. Tudna magyarázatot adni arra, hogy ezek az opciók mit jelentenek? Ez azt is segítheti, hogy elmagyarázza, miben különbözik a megközelítése a kérdésre adott egyéb válaszoktól, amelyek szintén ajánlják a
pdfgrep
-t.
Válasz
A leggyorsabb út
grep -rinw "pattern" --include \*.pdf *
Megjegyzések
- Üdvözöljük az oldalon. Szeretne további magyarázatot adni a javasolt megoldáshoz, hogy az hozzáférhetőbb legyen a nem szakértő számára? Például a
grep
parancssora rekurzívan keres azokban az alkönyvtárakban, amelyekről valaki nem ismeri agrep
t. Ezenkívül felvette a-i
jelzőt, bár az eset figyelmen kívül hagyása nem mindig az, amit a felhasználó kíván. Ezenkívül kérjük, magyarázza el, hogy a megközelítése miben különbözik a pl. @phuclv és mások. - Ahogy az AdminBee mondja, a kérdés nem tesz különbséget kis- és nagybetűk közötti keresésben vagy rekurzív könyvtár keresésben. A
-n
és-w
opciókat a kérdés sem indokolja. És ami még ennél is fontosabb, ez a válasz elmondja, hogyan lehet keresni olyan szövegfájlokban, amelyek neve.pdf
végződésű – elmulasztotta a kérdés lényegét.
Válasz
less mypdf.pdf | grep "Hello, World"