Portál AbcLinuxu, 30. dubna 2025 18:20

pdfgrep

15.6.2009 18:47 | Výběrový blog | poslední úprava: 16.6.2009 16:43

Konec procházení přednáškových slidů :). Trochu upravená verze z http://blog.rompe.org/pdfgrep.

#!/bin/sh
# 2004-06-22 Ulf Rompe

if [[ $# -lt 2 ]]; then
    echo 'Syntax: pdfgrep [grep options] <pattern> <file> [file ...]'
    exit 1
fi

while [ ${1:0:1} == "-" ]; do
    GREP_OPTIONS="$GREP_OPTIONS $1"
    shift
done

pat="$1"
shift

if [[ $# -gt 1 ]]; then
  GREP_OPTIONS="-H $GREP_OPTIONS"
fi
export GREP_OPTIONS

for file in "$@"; do
    pdftotext -layout "$file" - 2>/dev/null | egrep --label="$file" "$pat"
done

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Aleš Janda avatar 15.6.2009 19:22 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
Rozbalit Rozbalit vše Re: pdfgrep
Odpovědět | Sbalit | Link | Blokovat | Admin
Na přednáškové slidy se mi nejvíce osvědčil starý dobrý Acroread - umí fulltextově prohledávat všechny PDF soubory v zadaném adresáři a podadresářích. Tak jen všechny přednášky + vše co má smysl naházím do jednoho adresáře a prohledávám podle toho. Dokonce to řadí i dle relevance :-)
Zahrajte si trojšachy přes internet :-)
mutable avatar 15.6.2009 19:31 mutable | skóre: 7 | blog: mutable_the_mutative
Rozbalit Rozbalit vše Re: pdfgrep

Wow. Vyzkouším ASAP.

Fluttershy, yay! avatar 15.6.2009 19:25 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: pdfgrep
Odpovědět | Sbalit | Link | Blokovat | Admin
Eh, co to dělá s obrázky?
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
mutable avatar 15.6.2009 19:30 mutable | skóre: 7 | blog: mutable_the_mutative
Rozbalit Rozbalit vše Re: pdfgrep

Kašle to na ně.

Fluttershy, yay! avatar 15.6.2009 19:34 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: pdfgrep
No právě...
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
stativ avatar 15.6.2009 19:52 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: pdfgrep
Pán by chtěl i OCR? :-D
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
15.6.2009 20:09 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: pdfgrep
Ideálně umělou inteligenci. Prostě ji řeknu, ať mi v té kupě pdfek něco najde a až se vrátím z hospody, chcu to mít otevřené a důležité věci podtrhané. To je tak těžké?!!!
Baník pyčo!
15.6.2009 20:59 iin
Rozbalit Rozbalit vše Re: pdfgrep

Ano.

15.6.2009 21:18 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: pdfgrep
Odpovědět | Sbalit | Link | Blokovat | Admin
mozna blby dotaz, ale co dela tento kod: cut -c2 <<<x"$1" ?
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
Fuky avatar 15.6.2009 23:31 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: pdfgrep
Vrátí Ti to první znak $1 tj. uvedený cyklus pokračuje dokud jsou předávány volby pro grep tj. argumenty na příkazové řádce začínají znakem -.
Fuky avatar 15.6.2009 23:42 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: pdfgrep
To samé dělá i ${1:0:1} (Bash umí, Dash nezná). ;-)
mutable avatar 16.6.2009 02:23 mutable | skóre: 7 | blog: mutable_the_mutative
Rozbalit Rozbalit vše Re: pdfgrep

Hledají se přepínače pro grep (tj. znaky co začínají na -). V bash man stránce se <<< jmenuje "here string". Proč se před to dává xko? Zatím nevím, někdo to navrhl v komentáři (viz. zdroj), že prý to řeší problem s mezerami uvnitř názvů souborů, zatím sem nepřišel na to proč. :|

Fuky avatar 16.6.2009 08:36 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: pdfgrep

prý to řeší problem s mezerami uvnitř názvů souborů

To by mě zajímalo kde jsi to vyčetl, v diskuzi to vysvětlili jasně:

2. A small bug: if you pass a -e or -n as grep options, then the echo in the test of the first while loop thinks that it's an option for itself, for example echo -e outputs just a blank line.

Tj. pokud $1 bude obsahovat volby, které jsou dostupné i v echo, tak si je vezme za své právě echo. Příklad:

$ option="-n"

$ echo $option

$ echo x$option
x-n

Fuky avatar 16.6.2009 08:58 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: pdfgrep

Pro udržení kontextu, bavíme se o:

while [ `echo x$1 | cut -c2` == "-" ]; do

U následujícího provedení má x jiný význam, pokud by $1 byl prázdný řetězec vypsal by skript chybové hlášení [: ==: unary operator expected, protože na levé straně porovnání by nebylo nic:

while [[ $(cut -c2 <<<x"$1") == "-" ]]; do

Ale když použijeme uvozovky, tak se můžeme zbavit x i tady (dávat do uvozovek i $1 je zbytečné):

while [ "$(cut -c2 <<<$1)" == "-" ]; do

Nebo to rovnou můžeme napsat bez zbytečného cut:

while [ ${1:0:1} == "-" ]; do

mutable avatar 16.6.2009 16:47 mutable | skóre: 7 | blog: mutable_the_mutative
Rozbalit Rozbalit vše Re: pdfgrep

Oh. Upraveno. Omlouvám se. Přiznám se, že jsem ty komentáře jenom zhruba prolít.

Salutis avatar 16.6.2009 21:09 Salutis | skóre: 7 | blog: Salutis
Rozbalit Rozbalit vše Re: pdfgrep
Fuky, ty tu nemudruj a makaj na tých nových skriptoch. :)
Najväčší dar je vedieť posúdiť hodnotu vecí.
Salutis avatar 16.6.2009 21:08 Salutis | skóre: 7 | blog: Salutis
Rozbalit Rozbalit vše Re: pdfgrep
Odpovědět | Sbalit | Link | Blokovat | Admin
Len tak na okraj, tie podmienky sa dajú zjednodušiť z ...
if [[ $# -gt 1 ]]; then
  GREP_OPTIONS="-H $GREP_OPTIONS"
fi
... na ...
[ $# -gt 1 ] && REP_OPTIONS="-H $GREP_OPTIONS"
No a ten posledný cyklus čo ide po súboroch neberie názvy s medzerami.

Asi by bolo lepšie použiť:
ls ... | while read FILE; do
Najväčší dar je vedieť posúdiť hodnotu vecí.
Salutis avatar 16.6.2009 21:14 Salutis | skóre: 7 | blog: Salutis
Rozbalit Rozbalit vše Re: pdfgrep
Tú druhú pripomienku beriem späť. Zasa zom zabudol, že "$@" (s úvodzovkami) to zvláda v pohode.
Najväčší dar je vedieť posúdiť hodnotu vecí.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.