Diccionario de la RAE en tu terminal GNU/Linux

De vez en cuando se me da por comprar una de esas revistas que hablan de GNU/Linux, sobre todo cuando voy a coger un tren, para entretenerme durante el viaje, y como suelen venir con un CD de las últimas distros que van saliendo pues así de paso las pruebo.

El caso que este fin de semana me compré la “Todo Linux“. Me llamó la atención que en su sección de “Trucos Linux”, el destacado del mes trataba sobre la construcción de un pequeño y simplísimo script para gente nueva en el sistema. El Scritp no lo crearon ellos si no que era una pequeña modificación de un script colgado en TrucoLinux.com y que lo que hacía era mostrar una entrada del diccionario de la RAE en tu terminal.

Como en el artículo comentaban que el script no aceptaba las tildes (ni tampoco las ñ, ni las mayúsculas) pues me dispuse a retocar un poco el mismo para que si aceptara palabras con esos caracteres. Me aburro y lo cuelgo aquí.

El script acepta que le pases la palabra a buscar como parámetro, o se la introduzcas después.

#!/bin/bash 

## Funciones:

function buscar_palabra {
    echo "Se está buscando la palabra \"$aux\" en la RAE, esto"
    echo "puede tardar dependiendo de la velocidad de su conexión"
    echo ''
    #Aquí puedes utilizar lynx o links2 en lugar de links, y si quieres
    #quitarle el "-dump" para visualizar directamente el navegador
    links2 -dump "http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$palabra&origen=RAE"
    echo ''
}

function adaptar_palabra {
    #Pasar a minúsculas
    palabra=$(echo $palabra | awk '{print tolower($0)}')
    #Para poner la palabra por pantalla
    aux=$palabra
    #Cambiar caracteres especiales
    palabra=$(echo $palabra | sed 's/á/%C3%A1/')
    palabra=$(echo $palabra | sed 's/é/%C3%A9/')
    palabra=$(echo $palabra | sed 's/í/%C3%AD/')
    palabra=$(echo $palabra | sed 's/ó/%C3%B3/')
    palabra=$(echo $palabra | sed 's/ú/%C3%BA/')
    palabra=$(echo $palabra | sed 's/ñ/%C3%B1/')
}

## Parte principal:

if test -z $1
then
	clear
	echo "Diccionario de la RAE"
        echo "Introduce la palabra a buscar:"
	read palabra
	adaptar_palabra
	buscar_palabra
else
	clear
        palabra=$1
	adaptar_palabra
	buscar_palabra
fi

Argordmel propone en los comentarios que sería bueno que el script te diera la oportunidad de volver a buscar una palabra al final. Bien, pues esta podría ser una de las implementaciones ( es solo la parte principal del script):

## Parte principal:
buscar="s"
count="0"
while [ $buscar = 's' ]
do
	if [ $count -eq "0" ]
	then
		if test -z $1
		then
			clear
			echo "Diccionario de la RAE"
		        echo -n "Introduce la palabra a buscar: "
			read palabra
			adaptar_palabra
			buscar_palabra
		else
			clear
		        palabra=$1
			adaptar_palabra
			buscar_palabra
		fi
	else
		echo -n "Otra palabra: "
		read palabra
		adaptar_palabra
		buscar_palabra
	fi

	count=$(($count+1))

	opc=b
	while [ $opc != 'n' ] && [ $opc != 's' ]
	do
		echo -n "¿Buscar otra? [s/n]: "
		read opc
		if [ "$opc" = 'n' ]; then
			exit
		elif [ "$opc" = '' ]; then
			opc='b'
		fi
	done
done

Como bien dice mch en lo comentarios, si modificamos en esta segunda parte principal con el siguiente recorte de código desde la línea 16 (“else”) hasta la 21 (“fi”), podremos pasar como parámetro más de una palabra:

else
	for pal in "$@"; do
		clear
		palabra=$1
		adaptar_palabra
		buscar_palabra
		if [ $# -gt 1 ]; then
			echo "Pulse una tecla para siguiente palabra "
			read -n1
		fi
		shift
	done
fi

13 pensamientos en “Diccionario de la RAE en tu terminal GNU/Linux

  1. Sabes que sería bueno que hubiera un condicional que pidiera si deseo buscar otra palabra o de lo contrario que se cierre.

    Agur y saludos desde algún lugar de Colombia!!!

  2. argordmel :

    Sabes que sería bueno que hubiera un condicional que pidiera si deseo buscar otra palabra o de lo contrario que se cierre.

    Añado una de las posibles modificaciones de la parte principal del script para que se comporte como comentas.

    Saludos!

  3. Pingback: Ubuntu: Diccionario RAE desde un terminal GNU/Linux — Textualmenteactivo.com

  4. Otra manera de hacer la parte principal es que vaya pidiendo palabras hasta introducir una cadena vacía, que es como a mi me es más comodo:

    ## Parte principal:

    echo “Diccionario de la RAE”

    while [ 1 ]
    do
    echo -n “Introduce la palabra a buscar (en blanco para salir): ”
    read palabra
    if test -z $palabra
    then
    break
    fi
    adaptar_palabra
    buscar_palabra
    done

  5. @pitogrillo Si, es más sencillo, eliminas un paso para el usuario. Ahora habría que adaptarlo un poco para que en la primera ejecución aceptara la palabra por parámetro, que también resulta muy cómodo.
    Saludos.

  6. si para el segundo script modificamos desde la línea 17 (después del else) a la línea 20 (antes del fi) e introducimos estas líneas, podríamos pasar más de una palabra como argumento:

    for pal in “$@”; do
    clear
    palabra=$1
    adaptar_palabra
    buscar_palabra
    if [ $# -gt 1 ]; then
    echo “Pulse una tecla para siguiente palabra ”
    read -n1
    fi
    shift
    done

  7. Pues a mi no me funciona. Si cambio el links2 por firefox si que me lanza bien el navegador con la definicion de la palabra, pero con el links2 o lynx me dice pagina incorrecta y me muestra la pagina principal de la RAE. Alguna sugerencia?

  8. Pingback: La RAE en la consola | Ubunteate

  9. Pingback: Buscar palabras en el DRAE desde la terminal en GNU/Linux « El blog de SMAUG

  10. Pues no sé si el script habrá sido modificado después de esos mensajes de 2010 diciendo que no funcionaba, pero acabo de probar el primer script (utilizando lynx que es el navegador que tenía instalado) y me ha funcionado a la perfección a la primera.

    ¡Grandísima idea! ¡Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>