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.

