#! /bin/sh
# OpenOffice 2 stellt keine Suchfunktion bereit, mit der ein Bestand
# von Dateien im odt-Format auf das Vorkommen gewisser Suchwörter ge-
# testet werden könnte. Dieses Skript isoliert aus jeder odt-Datei den
# Text im xml-Format und testet, ob hierin die Suchbegriffe angetroffen
# werden. Das Skript ist nicht für Suchbegriffe mit Umlauten geeignet.
# Dieses Skript nutzt den Streameditor GNU sed 3.02, das Suchwerkzeug GNU
# grep 2.5.1 und die GNU bash 2.05
# 2009-02-04
if [ -z $1 ]; then
echo -e "
Dem Skript sind keine zu durchsuchenden Dateien
angegeben worden.\n"
exit 1
fi
echo -e "
Dieses Skript prueft odt-Textdateien auf das Vorkommen
von Suchbegriffen. Diese werden, einer je Zeile,
in einer unformatierten Textdatei übergeben.
Die zu durchsuchenden Dateien müssen, durch Leerraum
vom Kommando stringinodt.sh getrennt, bereits beim Aufruf
des Skriptes als Argument mitübergeben worden sein.
Das Programm ist nicht für Suchstrings mit Umlauten
und Sonderzeichen geeignet."
# Angabe der Listendatei mit den Suchbegriffen
echo -en "\n
Bitte die Listendatei angeben: "
read liste; echo -e "\n"
# Anlegen einer Datei fuer Zwischenergebnisse
touch /tmp/$$-treffer
# Jede uebergebene odt-Datei ist zu testen
while [ $1 ]; do
unzip -c $1 content.xml > /tmp/$$-content
# j pickt die Suchbegriffe zeilenweise
j=1
# Generieren eines ersten Suchbegriffs
d=$(sed -n "$j"p $liste)
# solange Suchbegriffe vorhanden sind, auf aktuellen
# xml-Auszug anwenden
while [ $d ]; do
grep -qi $d /tmp/$$-content
if [ $? -eq 0 ]; then
## Suchbegriff wurde gefunden
echo $d in $1 >> /tmp/$$-treffer
echo $d gefunden
fi
# Generieren des naechsten Suchbegriffes
j=$[$j+1];
d=$(sed -n "$j"p $liste)
done
# Die naechste odt-Datei in Arbeit nehmen
shift
done
# Sortieren der Zwischenergebnisliste, entfernen von Doppelungen
sort /tmp/$$-treffer | uniq > /tmp/treffer
echo -e "\n
Die Datei /tmp/treffer listet die Funde auf."
echo -e "\n"
# Loeschen der zwischenzeitlich benoetigten Dateien
rm /tmp/$$-treffer
rm /tmp/$$-content