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