AA_structure_ayla87_sxc_1384595.jpg

© Ayla87, sxc.hu

Suche in Datenformaten (Teil 1)

Mit Struktur

,
Grep gehört zu den elementaren Linux-Werkzeugen. Eine Reihe von Zusatztools hilft bei der Suche in Formaten, die dem kleinen Tool sonst versperrt bleiben.

Die Diskussion begann im Rahmen der OpenRheinRuhr 2011: Welche Tools eignen sich am besten für die Suche in den verschiedenen Dateiformaten? Das Hauptaugenmerk galt Programmen, die ähnlich wie Grep auf der Kommandozeile funktionieren. Es kam rasch eine größere Menge an Werkzeugen zusammen, wobei sich schnell herausstellte, dass viele davon kaum ein Nutzer kennt.

In der Folge entstand eine erste Übersicht solcher Tools, die Axel Beckert kurz darauf in seinem Blog [1] veröffentlichte. Die Liste beinhaltet neben dem Anwendungsbereich und Datenformat zusätzlich den Paketnamen für auf Debian oder Ubuntu basierende Linux-Distributionen.

Dieser Blog-Eintrag löste ein reges Experimentieren aus. Leser schickten weitere Hinweise, die eine erneute Recherche nach sich zogen, und in der Folge gelang es, die Liste weiter zu vervollständigen. Daraus entstanden bereits ein Artikel zur Suche in Postscript- und PDF-Dokumenten [2] sowie in Archiven und komprimierten Daten [3]. Nun steht eine Auswahl von Tools für Anwendungsformate im Mittelpunkt.

Exakte Position

Bei der Suche über viele Dateien ist es wichtig, den Dateinamen und die exakte Zeilennummer zu erfahren, in der ein Treffer auftritt. Grep leistet das über die Kombination der beiden Optionen -o und -n. Dabei sorgt -o als Kurzform für --only-matching dafür, dass Grep nur den exakten Treffer ohne den umgebenden Kontext ausgibt, -n (--line-number) stellt der Ausgabe die Zeilennummer voran.

Suchen Sie mit Grep über mehrere Dateien, so stellt das Programm der Ausgabe den Dateinamen voran. Dabei trennt es Dateiname, Zeilennummer und Treffer jeweils durch einen Doppelpunkt voneinander (Listing 1) und hebt, falls --color mit im Spiel ist, diese farblich unterschiedlich hervor.

Listing 1

$ cat -n datei1
1 Muster
2 muster
$ cat -n datei2
1 muster
2 MusTer
$ grep -on -E "Mus[tT]er" datei*
datei1:1:Muster
datei2:2:MusTer

Gnumeric

Zur Office-Suite des Gnome-Projekts zählt die Tabellenkalkulation Gnumeric. Das Paket enthält neben dem eigentlichen Programm die beiden nützlichen Werkzeuge Ssconvert und Ssgrep. Die ersten beiden Buchstaben stehen für "Spreadsheet", also Tabellenblatt. Während Ssconvert Gnumeric-Rechenblätter in andere Formate umwandelt, sucht Ssgrep in diesen nach dem übergebenen Suchmuster.

Dabei unterstützt das Programm jedes Datenformat, für das Gnumeric einen Import-Filter besitzt. Neben dem nativen Gnumeric-Format (Gzip-komprimiertes XML) fallen unter anderem CSV-Daten, Microsoft Excel, Quattro Pro sowie das XML-Format von OpenOffice und LibreOffice Calc [4] in diese Kategorie.

Der Aufruf von Ssgrep ähnelt dem von Grep in vielerlei Hinsicht: Das Programm erwartet zwei Parameter – als erstes die Optionen mit dem Suchmuster, als zweites den Namen der Gnumeric-Datei, in der Sie suchen möchten. Es interpretiert das angegebene Muster als regulären Ausdruck [5] und ermöglicht somit volle Flexibilität beim Formulieren.

Als Treffer gibt es den gesamten Inhalt der Zelle aus. Mit der Option -H (Kurzform für --with-filename) gibt es zusätzlich den Dateinamen aus. Die Option -c zählt die Treffer ("count"). Mit -n (--print-locus) erhalten Sie zusätzlich den Namen des Rechenblattes sowie die Zellennummer. Listing 2 zeigt den Aufruf von Ssgrep zur Datei aus Abbildung 1.

Abbildung 1: Ein Rechenblatt mit einer umfangreichen Produktliste in Gnumeric.

Listing 2

$ ssgrep -cH "Nano[Ss]tation" datei
datei:4
$ ssgrep -Hn "Nano[Ss]tation" datei
datei:Blatt1!C4:8xUbiquiti NanoStation M5
datei:Blatt1!C5:2xUbiquiti NanoStation 5
datei:Blatt1!C6:2xUbiquiti Nanostation M5
datei:Blatt1!C8:1xUbiquiti NanoStation M5

Die beiden Optionen -l und -L erweisen sich als nützlich, wenn Sie mehrere Dateien durchsuchen und nur den Namen der Datei benötigen, in der das Programm eine Übereinstimmung mit dem Muster findet. Mit der Option -l erhalten Sie eine Positivliste, mit -L hingegen eine Negativliste, also alle Dateien ohne Treffer. Diese beiden Optionen helfen dabei, den Suchraum einzugrenzen.

TIPP

Ssgrep kennt keine Option --color. Möchten Sie trotzdem etwas Farbe ins Ergebnis bringen, filtern Sie die Ausgabe durch ein nachfolgendes grep --color.

Für die Tabellenkalkulation Calc von OpenOffice und LibreOffice existiert kein Kommandozeilenwerkzeug, das ähnlich wie Ssgrep funktioniert. Allerdings hat Klaus Becker auf der Mailingliste der deutschen Debian-Anwender ein Skript gepostet [6], das Unzip und Grep kombiniert, um dennoch eine Suche im Terminal zu ermöglichen.

Die graphische Alternative Loook [7], ein Python-Skript mit Tk-Oberfläche, beherrscht die Suche in allen Dokumenten von Open- und LibreOffice (Abbildung 2). Es steht bisher allerdings nicht als Paket für Debian oder Ubuntu bereit, sondern nur als ZIP-Datei zum freien Download.

Abbildung 2: Loook hilft bei der Suche in Open- und LibreOffice-Dateien.

Im mittleren Eingabefeld (Search Path) des Fensters legen Sie fest, in welchem Verzeichnis die Software nach passenden Dateien sucht. Das dritte Eingabefeld (Search terms) nimmt das Suchkriterium auf. Allerdings verarbeitet Loook keine regulären Ausdrücke, sondern nur exakte Zeichenketten.

Sie haben die Möglichkeit, einen oder mehrere Suchbegriffe einzugeben und diese logisch miteinander zu verknüpfen. Dazu wählen Sie im Schalter Mode den entsprechenden Eintrag aus. Alle Treffer erscheinen in der unteren Box, ein Klick auf den Dateinamen öffnet die Datei. Welches Programm Sie dazu verwenden, bestimmen Sie über das oberste Eingabefeld (Viewer).

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 10/2016: Kryptographie

Digitale Ausgabe: Preis € 0,00
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Probleme mit MPC/MPD
Matthias Göhlen, 27.09.2016 13:39, 2 Antworten
Habe gerade mein erstes Raspi Projekt angefangen, typisches Einsteigerding: Vom Raspi 3B zum Radi...
Soundkarte wird erkannt, aber kein Ton
H A, 25.09.2016 01:37, 6 Antworten
Hallo, Ich weiß, dass es zu diesem Thema sehr oft Fragen gestellt wurden. Aber da ich ein Linu...
Scannen nur schwarz-weiß möglich
Werner Hahn, 20.09.2016 13:21, 2 Antworten
Canon Pixma MG5450S, Dell Latitude E6510, Betriebssyteme Ubuntu 16.04 und Windows 7. Der Canon-D...
Meteorit NB-7 startet nicht
Thomas Helbig, 13.09.2016 02:03, 4 Antworten
Verehrte Community Ich habe vor Kurzem einen Netbook-Oldie geschenkt bekommen. Beim Start ersch...
windows bootloader bei instalation gelöscht
markus Schneider, 12.09.2016 23:03, 1 Antworten
Hallo alle zusammen, ich habe neben meinem Windows 10 ein SL 7.2 Linux installiert und musste...