#! /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