Aus LinuxUser 06/2016

Schneller Suchfilter Icgrep (Seite 2)

In der Praxis

Icgrep steuern Sie wie seine Vettern Grep oder Agrep weitgehend durch Optionen. Da es sich bei dem Tool um eine Forschungssoftware handelt, enthält es zwei beziehungsweise drei Gruppen von Optionen mit unterschiedlicher Relevanz für normale Anwender. Wie üblich zeigt -help die wichtigsten davon. Einen Schritt weiter geht -help-list: Es generiert eine kurze, kompakte Liste wichtiger Schalter, die allerdings schon einiges Wissen über reguläre Ausdrücke voraussetzt. Mit -help-list-hidden erhalten Sie schließlich die vollständige Liste der Optionen, von denen allerdings viele nur in speziellen Fällen von Bedeutung sind.

Muster, also reguläre Ausdrücke, definieren Sie nach dem Schalter -e („expression“). Falls die Gefahr besteht, dass die Shell darin Meta-Zeichen erkennt und auswertet oder ersetzt, schließen Sie das Muster zwischen einfachen oder doppelten Hochkommas ein. Dem Aufruf, der mehrfach auftreten darf, kann (muss aber nicht) ein Gleichheitszeichen folgen:

$ icgrep -e Mus -e=ter

Diese Art der Ausdrücke stehen dann für ein logisches Oder: Bedingung 1 ODER Bedingung 2 ODER beide müssen erfüllt sein. Wird die Anzahl der Muster zu groß und die Befehlszeilen damit zu unübersichtlich, empfiehlt es sich, die Muster in eine externe Datei auszulagern, jeweils eines pro Zeile. Diese Datei geben Sie durch icgrep -f Musterdatei an. Die wichtigsten Schalter von Icgrep fasst die Tabelle „Wichtige Optionen von Icgrep“ zusammen.

Ein deutliches Manko von Icgrep: Es gibt keine Option, Verzeichnisse rekursiv zu bearbeiten, wie dies GNU-Grep mit dem Schalter -r macht. Stattdessen gilt es, auf die Kombination von Find, Xargs und Icgrep zurückzugreifen:

$ find Pfad -type f | xargs icgrep Muster

Alternativ unterstützen heute zwar mehrere Shells, so auch die Bash, die rekursive Verzeichnissuche durch **. Das setzt aber voraus, dass Sie diese Funktion via shopt -s globstar aktivieren. Der Befehl shopt globstar zeigt dann globstar on. Achtung: Dieses Verfahren führt eventuell zu überlangen Argumentlisten und Fehlermeldungen wie -bash: /usr/local/bin/icgrep: Die Argumentliste ist zu lang.

Zu den weiteren wichtigen Optionen, die Icgrep bisher fehlen, zählen -v („invert match“), -C, -A, -B (Kontextzeilen anzeigen), -m (maximale Trefferanzahl festlegen), -a, -b (Eingaben als Text beziehungsweise binär interpretieren) sowie --color (Treffer in der Ausgabe farbig hervorheben). Einiges davon wollen die Entwickler demnächst implementieren [6].

Wichtige Optionen von Icgrep

Option Funktion
-e=Muster ein Muster definieren, mehrfach angebbar
-f=Datei Musterdatei
-c nur Treffer zählen, nicht zeigen
-n Zeilennummern der Treffer anzeigen
-H Dateinamen anzeigen
-i Groß-/Kleinschreibung ignorieren
-disable-Unicode-linebreak nur noch NL als Zeilenende
-normalize-line-breaks Zeilenenden normalisieren
-dump-generated-IR zeigt die verwendeten regulären Ausdrücke
-print-REs zeigt benannte Ausdrücke

Regexe testen

Bei großen Datenströmen empfiehlt es sich, reguläre Ausdrücke zunächst zu testen, bevor Sie diese auf die gesamten Daten anwenden. Weniger versierten Anwendern erleichtern hier Tools das Leben, die reguläre Ausdrücke visualisieren. Unter Ubuntu finden sich derzeit zwei dieser Werkzeuge in den Repositories: Kodos und Kiki [7].

Während Kodos sich nur auf älteren Distributionen ohne Klimmzüge installieren lässt, gibt sich Kiki (Abbildung 3) anspruchsloser. Es verwendet die durch Python definierten und erzeugten regulären Ausdrücke, die es testweise auf einen zuvor eingegebenen Text anwendet.

Abbildung 3: Kiki (oben) und Regexper (unten) testen reguläre Ausdrücke, bevor sie auf großen Datenmengen zum Einsatz kommen.
Abbildung 3: Kiki (oben) und Regexper (unten) testen reguläre Ausdrücke, bevor sie auf großen Datenmengen zum Einsatz kommen.

Etwas anders funktioniert das Regexp Testing Tool regexper [8]. Das Java-Programm verwendet naturgemäß Java-basierte Regular Expressions und wendet diese auf eine zuvor geladene Testdatei an (Listing 3). Die Versuchsdaten dürfen relativ groß ausfallen, was sich manchmal als Vorteil erweist.

Listing 3

$ java -Xmx1200M -Dfile.encoding=windows-1251 -jar bin/regexper.jar -f Testdatei

Allerdings weisen alle diese Werkzeuge Schwächen beim Verarbeiten von Unicode-Zeichen auf, sodass sie sich bei der Konstruktion von regulären Ausdrücken nur für erste Tests mit einfachen Zeichen eignen.

Fazit

Sofern Sie keinen Bedarf an Unicode-spezifischen Features haben, genügen für das Durchsuchen kleiner Datenströme beziehungsweise Dateien die herkömmlichen Grep-Varianten völlig – nicht zuletzt deswegen, weil es davon ja spezielle Ableger für unterschiedliche Einsatzgebiete gibt, wie beispielsweise Agrep [9]. Ganz anders sieht es beim Durchsuchen von großen Datenströmen nach komplexen Mustern aus: Hier stellt Icgrep sicherlich eine der bemerkenswertesten Neuentwicklungen der letzten Zeit dar und lässt sich obendrein kostenfrei nutzen. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
LinuxUser 06/2016 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: