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

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 a stdout fájlba írjon, helyette egy - fájlt megadva. Hasonlóképpen, egyes eszközök alapértelmezés szerint a stdout 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ége cat
  • 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 a grep 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 . Csak pdfgrep '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 a grep 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" 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük