staging.inyokaproject.org

pdfgrep - Suche nach einem Punkt gefolgt von mind. 2 Zahlen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

kreien

Anmeldungsdatum:
11. Mai 2020

Beiträge: Zähle...

Hallo,

erstes Posting hier ☺ - vorweg: Ich arbeite erst seit wenigen Stunden mit ubuntu, habe null Ahnung und stelle mich nicht nur mit Linux, sondern auch pdfgrep reichlich dämlich an. Mittlerweile habe ich es immerhin geschafft, pdfgrep zum Arbeiten zu bewegen.

Leider will mir Folgendes nicht gelingen: Ich suche in einer pdf-Datei alle Vorkommen mit einem Punkt, gefolgt von mind. zwei beliebigen Ziffern.

Funktioniert nicht:

pdfgrep -in .[0-9]{2,} *.pdf

Funktioniert nicht:

pdfgrep -in \.[0-9]{2,} *.pdf

Funktioniert nicht:

pdfgrep -in "."[0-9]{2,} *.pdf

Funktioniert nicht:

pdfgrep -in [:punct:][0-9]{2,} *.pdf

Weil ein Punkt "." und auch

[:punct:]

stehen in pdfgrep wohl als regulärer Ausdruck für ein beliebiges Zeichen. Den Backslash zur Aufhebung der Metafunktion des Metazeichens interessiert pdfgrep leider auch nicht weiter.

Wie kann ich denn pdfgrep mitteilen, dass ich einen Punkt als Satzzeichen suche?

Vielen Dank im Voraus für Ideen.

VG Michael

Neral

Anmeldungsdatum:
3. Oktober 2007

Beiträge: 229

Moin,

die Shell ist ein wenig... speziell, was Backslashes, Anführungszeichen und Klammern angeht:

1
2
3
4
5
6
7
8
~ » echo .
.
~ » echo \.
.
~ » echo '\.'
\.
~ » echo "\."
\.

Ein Backslash, der nicht in Anführungszeichen steht, wird von der Shell als Escapezeichen interpretiert und gar nicht erst an das Programm weitergereicht. Den Punkt allein in Anführungszeichen zu setzen, löst das Problem auch nicht, weil der Punkt selber (im Gegensatz zum Stern beispielsweise) kein Shell-Sonderzeichen ist und damit nicht von der Shell interpretiert wird. Das Problem hier ist, dass der Punkt ein Sonderzeichen in RegEx ist und damit für pdfgrep maskiert werden muss.

Zweites Problem:

1
2
~ » echo foo{2,}
foo2 foo

Die geschweiften Klammern mit Komma haben auch eine spezielle Bedeutung (Wiederholung von einem Wort mit Unterschied). Zum Beispiel sehr nützlich, um eine Operation mit ähnlichen Dateien/etc. durchzuführen (Beispiel aus meiner Shell-History):

1
2
~ » rm -rf ghc-tinfo6-8.8.{1,2}*
# Das gleiche wie rm -rf ghc-tinfo6-8.8.1* ghc-tinfo6-8.8.2*

Ergo: Sachen wie RexEx, die Sterne, Backslashes oder geschweifte Klammern enthalten, am besten immer in einfache Anführungszeichen setzen, dann interpretiert die Shell da nichts dran rum:

1
2
~ » echo '\.[0-9]{2,}'
\.[0-9]{2,}

kreien

(Themenstarter)

Anmeldungsdatum:
11. Mai 2020

Beiträge: 3

Hallo,

ganz herzlichen Dank für die wertvollen Tipps. Jetzt funktioniert es.

Vielleicht noch eine Frage in die Runde: Ich werde mich künftig mehr mit "Regulären Ausdrücken" (RegExp) und pdfgrep beschäftigen. Ich habe gesehen, dass es dazu verschiedene deutschsprachige Bücher gibt, siehe hier: https://portal.dnb.de/opac.htm?method=showNextResultSite&currentResultId=%22regul%C3%A4re%22+and+%22ausdr%C3%BCcke%22%26any (OPAC der Deutschen Nationalbibliothek).

Die sind fast alle von O'Reilly. Kennt jemand diese oder andere Bücher und möchte mir eines zum Einstieg empfehlen?

VG Michael

merlin1987

Anmeldungsdatum:
27. Juli 2009

Beiträge: 360

kreien schrieb:

Kennt jemand diese oder andere Bücher und möchte mir eines zum Einstieg empfehlen?

Meine Empfehlung ist die RegExp-Bibel von Jeffrey Friedl.

kreien

(Themenstarter)

Anmeldungsdatum:
11. Mai 2020

Beiträge: 3

Hallo,

merlin1987 schrieb:

Meine Empfehlung ist die RegExp-Bibel von Jeffrey Friedl.

Danke für den Tipp. Mit RegExp-Bibel ist wahrscheinlich das Werk "Friedl, J.E.F.: Reguläre Ausdrücke" gemeint: http://d-nb.info/984685936

Ist in der Print-Version in der 3. Auflage leider vergriffen: https://www.oreilly.de/buecher/120245/9783897217201-regul%C3%A4re-ausdr%C3%BCcke.html

Ich behalte es aber im Hinterkopf, kommt sicherlich irgendwann eine weitere Auflage oder ein Nachdruck.

VG Michael

Antworten |