Trotz des hässlichen Wetters wünsche ich allen einen
guten Tag !
Da ich keine Dokumentation zu OpenOffice habe, frage ich mal in die Runde.
Ausgangspunkt: ein Verzeichnis mit vielen Dateien, er- zeugt mit OpenOffice. Ich möchte wissen, in welchen Da- teien eine bestimmte Textkette vorkommt.
Primitive Lösung: jede Datei einzeln aufrufen und mit der in OpenOffice vorhanden Funktion "Suchen" durch- suchen, ob die Textkette darin auftritt. Diese Lösung ist sehr aufwendig und gefällt mir deswegen nicht.
Elegantere Lösung: ein Makro, der in diesem Verzeichnis eine Datei nach der anderen sich vornimmt und sie auf das Auftreten der Zeichenkette durchsucht. Wenn er sie findet, soll er natürlich den Namen der Datei ausgeben.
Wäre doch 'was für einen Makro... Wo finde ich Informa- tionen zu Makros in OpenOffice, ohne viel Geld für ein Buch ausgeben zu müssen? Und wenn es nicht anders gehen würde: Verfasser? Titel?
Übrigens: grep geht wegen der Codierung in OpenOffice nicht.
Vielen Dank für Eure Hinweise und beste Grüsse
Peter M.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
Thomas Schmidt schrieb:
Dokument ZIP-entpacken, content.xml mit grep durchsuchen.
Kopf- und Fußzeilen sind in der styles.xml drin. Das kann man leicht übersehen.
Viele Grüße, Torsten
peter schrieb:
Elegantere Lösung: ein Makro, der in diesem Verzeichnis eine Datei nach der anderen sich vornimmt und sie auf das Auftreten der Zeichenkette durchsucht. Wenn er sie findet, soll er natürlich den Namen der Datei ausgeben.
Wäre doch 'was für einen Makro... Wo finde ich Informa- tionen zu Makros in OpenOffice, ohne viel Geld für ein Buch ausgeben zu müssen? Und wenn es nicht anders gehen würde: Verfasser? Titel?
Übrigens: grep geht wegen der Codierung in OpenOffice nicht.
Die Dateien von OpenOffice sind im Prinzip ZIP-Archive. Du kannst die Dateien also mit einem Shellscript einzeln "entpacken" und dann den Inhalt der XML-Dateien untersuchen, in denen der eigentliche Inhalt des Textes steht.
for F in *.odt do unzip "$F" content.xml && mv -v content.xml `basename $F .odt`_content.xml; ls -1 $F; echo "" done
Dabei entsteht folgendes:
Archive: beispiel1.odt inflating: content.xml content.xml -> beispiel1_content.xml beispiel1.odt
Archive: beispiel2.odt inflating: content.xml content.xml -> beispiel2_content.xml beispiel2.odt
Archive: beispiel3.odt inflating: content.xml content.xml -> beispiel3_content.xml beispiel3.odt
In den XML-Dateien kannst Du dann mit entsprechenden Werkzeugen nach der gewünschten Zeichenkette suchen.
HTH, Stefan
.
Hallo,
Am Montag, 12. April 2010 09:59:35 schrieb peter:
Ausgangspunkt: ein Verzeichnis mit vielen Dateien, er- zeugt mit OpenOffice. Ich möchte wissen, in welchen Da- teien eine bestimmte Textkette vorkommt.
Für grep existieren Wrapper, damit auch gepackte Dateien (zip, gzip, ...) durchsucht werden können. Das Werkzeug zipgrep ist Teil des Pakets unzip. Zuerst suchst du damit generell nach einer Zeichenkette in den XML- formatierten Daten im OpenDocument-Format. Ungefähr so:
suchterm=... for i in *.od?; do zipgrep -qi $suchterm $i && echo "Gefunden in $i"; done
Wenn der Dateiname allein nicht ausreichend ist, kannst du auch noch den Kontext der Suchergebnisse durch farbige Hervorhebung unter Auslassung der unnötigen XML-Strukturen darstellen:
zipgrep -hi $suchterm $i | xmlstarlet sel -t -c "//*[contains(text(),'$suchterm')]/text()" | ack-grep -i $suchterm
Zu beachten ist hierbei, dass xmlstarlet leider noch nicht die XPath-Funktion lower-case() unterstützt und dass das Werkzeug ack-grep mitunter gar nicht oder mitunter auch bereits unter dem Namen grep installiert ist.
Josef
lug-dd@mailman.schlittermann.de