Hola.

He encontrado este script que me parece muy interesante por lo �til. Sirve 
para buscar una palabra en el Diccionario de la Real Academia de la Lengua, y 
funciona perfecto. Yo lo he copiado a /usr/bin para poder ejecutarlo en 
cualquier consola, y te lo muestra de forma parecida a una p�gina man. Espero 
que os sea tan �til como a mi:

#!/bin/sh

# ###########################################################################
#
# Autor: Miguel Angel Rodr�guez (aka timeo)
# Email: [EMAIL PROTECTED] || [EMAIL PROTECTED]
#
# Fecha: 09 de enero de 2004.
#
# Explicacion:
#  Script para buscar definiciones de t�rminos
#  en el diccionario de la R.A.E "on line".
# 
# Utilidad:
# bRAE.sh busca definiciones de t�rminos en la base de datos de la RAE,
# los muestra en pantalla y guarda una copia comprimida en un directorio
# creado por el programa para tal efecto. Adem�s posee varias opciones
# de b�squeda y "limpieza" de archivos de definiciones. La idea base es
# tener un script para consultar en l�nea el diccionario de la Real 
#  Academia de la Lengua y a la vez ir almacenando el resultado de estas 
# consultas en nuestro disco duro.
#
# Dependencias:
# Lynx 2.8.X
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
#
#
# ###########################################################################

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

if [ -z "$LANG" ]
then
 LANG="es_ES.ISO-8859-1" # No usamos LANG="C" porque el script es para 
trabajar
 export LANG  # exclusivamente con palabras del idioma espa�ol o
fi    # castellano.

trap "" 1

test -x /bin/cat || exit 0
test -x /bin/date || exit 0
test -x /bin/echo || exit 0
test -x /bin/grep || exit 0
test -x /bin/gzip || exit 0
test -x /bin/mkdir || exit 0
test -x /bin/mv || exit 0
test -x /bin/rm || exit 0
test -x /bin/sed || exit 0
test -x /bin/zgrep || exit 0
test -x /sbin/ifconfig || exit 0
test -x /usr/bin/clear || exit 0
test -x /usr/bin/cut || exit 0
test -x /usr/bin/file || exit 0
test -x /usr/bin/find || exit 0
test -x /usr/bin/less || exit 0
test -x /usr/bin/lessfile || exit 0
test -x /usr/bin/lynx || exit 0
test -x /usr/bin/stat || exit 0
test -x /usr/bin/touch || exit 0
test -x /usr/bin/wc || exit 0

# Nos aseguramos de que est� establecido
# el entorno para que less pueda abrir 
# ficheros comprimidos con gzip.

eval "$(lessfile)"

################################################
#
# Algunas constantes para hacernos la vida m�s
# c�moda.
#
################################################

# Definimos una constante para el nombre del
# programa. $0 no nos sirve, pues nos da el
# path absoluto. :-(
PROGRAMA="bRAE.sh"

# Definimos la interfaz de red que nos conecta 
# a internet.
DEVICE="ppp0"

# Nombre (URL) del servidor de la RAE.
SERVIDOR="buscon.rae.es"

# Direcci�n URL del servidor de la base de datos
# de la RAE.
URL="http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=";

# Directorio en donde se guardan las archivos 
# de t�rminos encontrados y comprimidos.
BD=${HOME}/DRAE/

# Fichero que se usa para escribir la lista de
# palabras que se desean buscar de una sola vez.
FICHEROPALABRAS=${HOME}/palabrasRAE.txt

# Fichero usado para guardar temporalmente la
# lista de palabras que todav�a faltan buscar.
FICHEROPALABRASTMP=${HOME}/palabrasRAE-TMP.txt

# Cadena de texto que muestra el servidor de la RAE cuando
# la palabra buscada no se encontr�.
CADENARAE='La palabra consultada no est� en el Diccionario.'

# Caracteres especiales excluidos. �Falta alguno?
CARESPECIALES="[-��\!\|\"[EMAIL 
PROTECTED]&\/\(\)\=\?�\'���\{\}\*\+\_\;\:\.\<\>\`]"


################################################
#
# Funciones para escribir menos y ocupar menos
# espacio ;-).
#
################################################

function buscar_borrar_ficheros() {

# Para determinar cu�les ficheros no contienen definiciones
# medimos su extensi�n (100 b), constatamos la existencia
# -o no- de una cadena de texto especial y, por �ltimo,
# comprobamos el tipo de fichero (si es comprimido o no).
# S�ntesis: comprobamos tama�o (stat), contenido (zgrep) y formato (file).

 nom_fichero=`echo $1 | cut -c 6- | cut -f2 -dE | cut -c 2- | cut -f1 -d.`

 if [[ `stat -c %s $1` -le 100 || -n `zgrep 'La palabra '\"$nom_fichero\"' \
no est� en el Diccionario.' $1` || -z `file -b $1 | grep -s  'gzip compressed 
data'` ]]
 then
  case "$2" in
   "0")
   let numero=numero+1
   echo -e "\nBorrando ficheros vac�os... $1 [$numero]\n"
   rm -f $1
   ;;

   "1")
   let numero=numero+1
   echo -e "\nMostrando ficheros vac�os... $1 [$numero]\n"
   ;;
  esac
 fi
}

function comprobar_fichero() {

 if [[ -s $FICHEROPALABRAS ]]
 then
  palabras=`cat $FICHEROPALABRAS`
 else
  echo -e "\nNo existe fichero de palabras a buscar, o est� vac�o.\n"
  exit 0;
 fi
}

function comprobar_fichero_2() {

 if [[ ! -f $1 ]]
 then
  touch $1
 fi
}

function comprobar_directorio() {

 if [[ ! -d $BD ]]
 then
  mkdir $BD
 fi 
}

function comprobar_entradas() {

# Comprobamos si los caracteres introducidos son
# v�lidos. No aceptamos may�sculas ni d�gitos
# ni caracteres especiales. 

 case "$3" in
  "0")
  comando="cat"
  ;;

  "1")
  comando="echo"
  ;;
 esac

 if [[ `$comando $1 | grep [[:upper:]]` || `$comando $1 | grep [[:digit:]]` \
|| `$comando $1 | grep -e $2` || `$comando $1 | wc -m` -gt 30 ]]
 then
  echo -e "\nIntroduzca una cadena v�lida. Debe estar compuesta s�lo\n\
de letras min�sculas y tener menos de 30 caracteres.\n"
  exit 0
 fi
}

function comprobar_conexion() {

# Usamos doble comprobaci�n por si es el caso
# de una m�quina parte de una LAN con IP MASQUERADE.

 if [[ -z `ifconfig $DEVICE 2> /dev/null | grep 'inet addr:' | cut -f2 -d: | 
cut -f1 -dP` ]]
 then
  if [[ -z `ping -c 1 $SERVIDOR | grep 'from' | cut -f2 -dm  | cut -f1 -d:` ]]
  then
   case "$1" in
    "0")
    echo -e "\nNo existe conexi�n a Internet.\n"
    exit 0
    ;;

    "1")
    conexion=0
    ;;
   esac
  fi
 fi
}

function buscar_definicion() {

# Buscamos la definici�n del t�rmino y el
# resultado de la b�squeda lo convertimos
# en texto plano comprimido.

 echo -e "\nBuscando definici�n de \"$1\"... $2"
 lynx -dump --nolist ${URL}${1} > ${BD}${1}

# Comprobamos si existe o no la definici�n
# en el servidor de la RAE.

 if [[ -n `grep -Es 'La palabra '\"$1\"' no est� en el Diccionario.' 
${BD}${1}` ]] 
 then
  rm ${BD}${1}
  echo -e "\n$CADENARAE\n"
  case $3 in
   "0")
   exit 0
                        ;;

                        "1")
#       !El poder de sed!... y el enorme consumo de ciclos de reloj para
#       hacer una "virguer�a" en un ficherito. :->
#       Este es un HACK, y de los peores.
                        sed s/$1//g $FICHEROPALABRAS > $FICHEROPALABRASTMP
                        sed '/^$/d' $FICHEROPALABRASTMP > $FICHEROPALABRAS
                        rm $FICHEROPALABRASTMP
                        let fallos=fallos+1
                        continue
                        ;;
                esac
        fi

        gzip -9 ${BD}${1}
}

function mensaje_error() {

        echo -e "\nUse par�metro $1.\n"
        exit 1
}

################################################
#
# Comienza el programa... o las opciones.
#
################################################

cat << EOF

$PROGRAMA
EOF

if [[ ! $# -ge 1 ]]
then
 echo -e "\nIntroduzca un vocablo. O use el par�metro -m.\n"
 exit 0

################################################
#
# Buscamos la definici�n de una serie de
# palabras que se encuentran en un fichero 
# ($HOME/palabrasRAE.txt).
# Tenemos la opci�n de ver o no la definici�n de
# cada una de ellas mediante el par�metro [-t].
#
################################################ 

elif [[ $1 = "-a" ]]
then
# Averiguamos si estamos conectados a Internet.
 comprobar_conexion "0"

# Comprobamos la existencia del fichero de palabras
# y, si existe, pasamos su contenido a la variable
# $palabras.
 comprobar_fichero

# Probamos la validez de los caracteres introducidos.
 comprobar_entradas "$FICHEROPALABRAS" "$CARESPECIALES" "0"

# Buscamos las palabras, primero en nuestro disco duro.
# Si no se encuentran aqu�, buscamos en el servidor de la RAE.

 let numero=0
 for termino in $palabras
 do
  if [[ -s ${BD}${termino}.gz ]]
  then
   case "$2" in
    "")
    echo -e "\nCach�...\n" 
    ;;

    "-t")
    less -sSC -~ ${BD}${termino}.gz
    ;;

    *)
    mensaje_error "-t"
    ;;
   esac
  else
   comprobar_directorio

   let numero=numero+1
   case "$2" in
    "")
    buscar_definicion "$termino" "$numero" "1"
    ;;

    "-t")
    buscar_definicion "$termino" "$numero" "1"
    less -sSC -~ ${BD}${termino}.gz
    ;;

    *)
    mensaje_error "-t"
    ;;
   esac
  fi
 done

 let cero=0
 resultado=${fallos:=$cero}
 encontradas=`expr $numero - $resultado` # Variable $fallos viene de funci�n
 clear                                   # buscar_definici�n().
 echo -e "\n$numero palabras buscadas en el servidor.\n
 $encontradas definiciones halladas.\n
 $resultado no encontradas.\n"

################################################
#
# Borramos los archivos generados por b�squedas
# fallidas. 
#
# - Con el par�metro [-b] sin nada m�s, buscamos 
# y borramos todos los ficheros comprimidos
# (*.gz).
# - Con el par�metro opcional [-t] buscamos
# todos los ficheros vac�os, y los borramos. 
# - Con el par�metro opcional [-h] buscamos y
# borramos los ficheros comprimidos de hoy.
# - Con el par�metro opcional [-th] borramos 
# todos los ficheros (comprimidos o no) de hoy. 
#
# Las opciones [-b] y [-b -t] pueden llegar a
# ser extremadamente lentas.
#
################################################ 

elif [[ $1 = "-b" ]]
then
 echo -e "\nBuscando ficheros vac�os..."

 for ficheros in ${BD}*
 do
  case "$2" in
   "")
   if [[ `find $ficheros -daystart -name '*.gz' -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "0"
   fi
   ;;

   -t)
   buscar_borrar_ficheros "$ficheros" "0"
   ;;

   -h)
   if [[ `find $ficheros -daystart -name '*.gz' -ctime -1 -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "0"
   fi
   ;;

   -th)
   if [[ `find $ficheros -daystart -name '*' -ctime -1 -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "0"
   fi
   ;;

   *)
   mensaje_error "-t, -h, o -th"
   ;;
  esac
 done

 if [[ $numero -gt 0 ]]
 then
  clear
  echo -e "\n$numero entradas borradas."
  exit 0
 else
  echo -e "\nNo encontr� ficheros para borrar. I'sorry... :-)\n"
  exit 0
 fi

################################################
#
# Buscamos los archivos generados por b�squedas
# fallidas. Igual que con el par�metro [-b] pero
# sin borrar nada.
#
# - Con el par�metro [-v] sin nada m�s, buscamos
# todos los ficheros comprimidos (*.gz).
# - Con el par�metro opcional [-t] buscamos la
# totalidad de los ficheros vac�os.
# - Con el par�metro opcional [-h] buscamos s�lo
# los ficheros comprimidos (*.gz) de hoy.
# - Con el par�metro opcional [-th] buscamos la
# totalidad de los ficheros vac�os de hoy.
#
# Las opciones [-v] y [-v -t] pueden llegar a
# ser extremadamente lentas.
#
# Opci�n para curiosos 8-).
#
################################################ 

elif [[ $1 = "-v" ]]
then
 echo -e "\nBuscando ficheros vac�os..."

 for ficheros in ${BD}*
 do
  case "$2" in
   "")
   if [[ `find $ficheros -daystart -name '*.gz' -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "1"
   fi
   ;;

   -t)
   buscar_borrar_ficheros "$ficheros" "1"
   ;;

   -h)
   if [[ `find $ficheros -daystart -name '*.gz' -ctime -1 -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "1"
   fi
   ;;

   -th)
   if [[ `find $ficheros -daystart -name '*' -ctime -1 -print` ]]
   then
    buscar_borrar_ficheros "$ficheros" "1"
   fi
   ;;

   *)
   mensaje_error "-t, -h, o -th"
   ;;
  esac 
 done

 if [[ $numero -gt 0 ]]
 then
  clear
  echo -e "\nEncontr� $numero ficheros vac�os. �Muchos?\n"
  exit 0
 else
  echo -e "\nNo encontr� ficheros vac�os. I'sorry... :-)\n"
  exit 0
 fi

################################################
#
# Opci�n para mostrarnos el n�mero total de
# entradas en el directorio del diccionario.
#
# - Con el par�metro [-n] sin nada m�s, nos
# muestra la totalidad de entradas comprimidas
# (*.gz).
# - Con el par�metro opcional [-t] nos muestra
# el n�mero total de entradas.
# - Con el par�metro opcional [-h] nos muestra
# el n�mero de ficheros comprimidos de hoy.
# - Con el par�metro opcional [-th] nos muestra
# el n�mero total de ficheros de hoy.
#
# Otra opci�n para curiosos.
#
################################################ 

elif [[ $1 = "-n" ]]
then
 case "$2" in
  "")
  cantidad=`find $BD -mindepth 1 -name '*.gz' -print | wc -l`
  echo -e "\nHay $cantidad palabras en el diccionario.\n"
  ;;

  -t)
  cantidad_total=`find $BD -mindepth 1 -name '*' -print | wc -l`
  echo -e "\nHay $cantidad_total palabras en el diccionario (total).\n"
  ;;

  -h)
  fecha=`date +%d-%m-%y`
  cantidad_hoy=`find $BD -mindepth 1 -daystart -name '*.gz' -ctime -1 -print | 
wc -l`
  echo -e "\nHay $cantidad_hoy palabras en el diccionario (hoy: $fecha).\n"
  ;;

  -th)
  fecha=`date +%d-%m-%y`
  cantidad_total_hoy=`find $BD -mindepth 1 -daystart -name '*' -ctime -1 
-print | wc -l`
  echo -e "\nHay $cantidad_total_hoy palabras en el diccionario (total hoy: 
$fecha).\n"
  ;;

  *)
  mensaje_error "-t, -h, o -th"
  ;;
 esac

################################################
#
# Limpiamos el archivo $HOME/palabrasRAE.txt.
# S�lo dejamos las palabras cuya definici�n a�n
# debemos hallar.
#
################################################ 

elif [[ $1 = "-l" ]]
then
# Pasamos el contenido del fichero a la
# variable $palabras

 comprobar_fichero
 comprobar_fichero_2 "$FICHEROPALABRASTMP"

 let numero=0

 for termino in $palabras
 do
  if [[ ! -s ${BD}${termino}.gz ]]
  then
   echo -e $termino >> $FICHEROPALABRASTMP
   let numero=numero+1
  fi
 done

 mv $FICHEROPALABRASTMP $FICHEROPALABRAS

 echo -e "\n$numero palabras guardadas.\n"

################################################
#
# Men� para no olvidarnos del uso para el cual
# fue hecho este script :-).
#
################################################ 

elif [[ $1 = "-m" ]]
then
 declare -a MENU

 MENU=(
  "Busca definiciones en el DRAE \"on line\"."
  "Versi�n: 0.01"
  "Autor: Miguel Angel Rodr�guez"
  "Licencia: Este programa se distribuye bajo licencia"
  "--------- GNU GPL y SIN NINGUNA GARANTIA."
  ""
  "Modo de uso:" 
  "-----------  bRAE.sh [palabra] busca definici�n de [palabra]."
  ""
  "[-a] busca definiciones de palabras desde un fichero"
  "[-a] [-t] �dem anterior pero mostrando cada una de las definiciones."
  ""
  "[-b] busca y borra las entradas vac�as con extensi�n <*.gz>."
  "[-b] [-t] busca y borra todas las entradas vac�as."
  "[-b] [-h] busca y borra las entradas vac�as con extensi�n <*.gz> de hoy."
  "[-b] [-th] busca y borra todas las entradas vac�as de hoy."
  ""
  "[-v] busca los ficheros vac�os con extensi�n <*.gz>."
  "[-v] [-t] busca todos los ficheros vac�os."
  "[-v] [-h] busca los ficheros vac�os con extensi�n <*.gz> de hoy."
  "[-v] [-th] busca todos los ficheros vac�os de hoy."
  ""
  "[-n] muestra cantidad de ficheros con extensi�n <*.gz>."
  "[-n] [-t] muestra total de ficheros."
  "[-n] [-h] muestra la cantidad de ficheros con extensi�n <*.gz> de hoy."
  "[-n] [-th] muestra el total de ficheros de hoy."
  ""
  "[-l] limpia el fichero de palabras encontradas." 
  ""
  "[-m] este men�."
  ""
  "Comunicar bugs y modificaciones a <[EMAIL PROTECTED]>."
  ""
 )

 let numero=0
 while [ $numero -lt 33 ]
 do
  echo ${MENU[numero++]}
 done

################################################
#
# Buscamos la definici�n de una palabra mediante
# una consulta al servidor de la RAE.
#
################################################ 

else
 comprobar_entradas "$1" "$CARESPECIALES" "1"

# Comprobamos si estamos conectados a Internet.
# El resultado lo alojamos en la variable $conexion.
 comprobar_conexion "1"

 if [[ -s ${BD}${1}.gz ]]
 then
  echo -e "\nCach�...\n"
  less -sSC -~ ${BD}${1}.gz
 elif [[ $conexion = "0" ]]
 then
  echo -e "\nNo existe conexi�n a Internet.\n"
  comprobar_fichero_2 "$FICHEROPALABRAS"
  if [[ ! `grep -w $1 $FICHEROPALABRAS` ]]
  then
   echo -e "Palabra guardada para su posterior b�squeda.\n"
   echo "$1" >> $FICHEROPALABRAS 
  else
   echo -e "Esta palabra ya fue guardada para su posterior b�squeda.\n"
  fi
  exit 0
 else
  comprobar_directorio
  buscar_definicion "$1" "" "0"
  less -sSC -~ ${BD}${1}.gz
  clear
 fi
fi
# -=-= fin de bRAE.sh =-=-

# Para escribir este shellscript se us�
# VIM - Vi IMproved 6.2 (2003 Jun 1, compiled Nov  9 2003 21:20:15).


-- 
   Un saludo de Willy Walker ;o)
   Usuario Linux: 100651
   Debian Sid 2.6.5
   Uno pregunta, muchos responden, todos aprenden.

Responder a