#!/bin/bash
# oofind - Procura um texto em arquivos do OpenOffice Writer (.sxw)
# Requisitos: bash, sed, grep, unzip
# Autor: Aurelio Marinho Jargas, Set2004 (http://aurelio.net)
#
# Uso: oofind PALAVRA [ARQUIVOS]
# Se nenhum arquivo for especificado, procura nos arquivos .sxw do
# diretorio corrente.
#
# Exemplo:
#
#    $ ls
#    adm-sistemas-I-instrutor.sxw  adm-sistemas-I.sxw
#
#    $ oofind Linux
#    Procurando por 'Linux' nos arquivos informados...
#    Achei em adm-sistemas-I-instrutor.sxw
#    Achei em adm-sistemas-I.sxw
#
#
# TODO -x pesquisa nas tags XML tambem
# TODO -i case insensitive

tmpdir=/tmp/lixo.$$                     # paranoicos: usem mktemp
trap "rm -rf $tmpdir" 2 15              # faxina se apertar Ctrl+C

[ "$1" ] || { echo "uso: oofind PALAVRA arquivos.sxw"; exit; }
texto="$1" ; shift                      # obtem palavra do usuario

echo "Procurando por '$texto' nos arquivos informados..."
mkdir "$tmpdir"                         # cria dir temporario
for arquivo in ${@:-*.sxw}; do          # arqs informados ou *.sxw
   unzip -q -d "$tmpdir" $arquivo       # unzipa no dir temporario
   sed 's/<[^>]*>//g' "$tmpdir/content.xml" | grep -qs "$texto" &&
     echo "Achei em $arquivo"           # apaga tags XML e procura
   rm -rf "$tmpdir"/*                   # limpa a bagunca
done
rmdir "$tmpdir"                         # remove dir temporario