Tabla de contenido
Una vez más aquí. Hoy vengo a dejar otro artículo relacionado con bash. Aun que parezca que le estoy cogiendo el gustito últimamente, en realidad viene todo relacionado al curso que «casi» tengo terminado. El profesor nos ha pedido que sigamos probando las cosas que se pueden hacer con este lenguaje de scripting. Por eso, después de crear un .sh para automatizar (un poco) el uso de aircrack-ng, nos ha pedido realizar otro script para buscar palabras dentro de un archivo, cosa que cuando trabajaba las listas m3u yo ya solía hacer. Pues trabajar con archivos de doscientas mil líneas, se vuelve complicado si no automatizas ciertos procesos.
Antes de meternos en el turrón del asunto, hay que decir que la búsqueda de palabras clave en archivos de texto creo que es una tarea bastante común en la programación y la administración de sistemas. Por eso, tener a mano un script como el que vamos a ver en breve, puede venir bien. Con estas líneas los usuarios podremos buscar una palabra específica en un archivo de texto y ver la línea en las que se encuentra, y el número de línea. Además, también vamos a contar cuántas veces se repite en todo el archivo. Como decía, este tipo de scripts puede resultar útil a la hora de automatizar procesos de búsqueda.
El código para buscar palabras en archivos utilizando bash
Bueno, según recuerdo, el profesor nos puso algunas condiciones para crear el script. Él quería que creásemos un script en bash que busque dentro de un archivo una palabra indicada por el usuario. En caso de que se encuentre la palabra, el script debe devolver la frase y en número de línea en la que se encuentra la palabra. El script debe buscar en todo el archivo hasta el final. El archivo en el que va a buscar el script será un archivo indicado por el usuario. También debe contar cuantas veces aparece en total la palabra buscada.
Y bueno, antes de ver el código, vamos a echar un vistazo a las diferentes cosas que he añadido a las líneas que veremos posteriormente.
Código de colores ANSI
Antes de sumergirnos en el código, es importante destacar que este script utiliza colores ANSI para resaltar los mensajes en la terminal. Estos colores hacen que la información sea más legible y fácil de distinguir. Se definen cuatro colores:
- VERDE: Usado para resaltar información exitosa.
- AMARILLO: Utilizado para destacar información importante o relevante.
- ROJO: Se emplea para indicar errores o problemas.
- NC (No Color): Restablece el color a su valor predeterminado.
Solicitando entradas por parte del usuario
El script comienza solicitando dos entradas al usuario. Estos dos puntos serán la parte fundamental del script:
- La palabra que el usuario quiere buscar.
- El nombre del archivo en el que se realizará la búsqueda.
Verificando la Existencia del Archivo

Una vez que se obtienen las entradas del usuario, el script va a verificar si el archivo especificado existe. Si el archivo no se encuentra, muestra un mensaje en rojo indicando que el archivo no existe y finaliza la ejecución del script. Con este script no se va a crear nada, ya que la idea del ejercicio es buscar, localizar y contar.
Buscar palabras en archivos
Si el archivo existe, el script inicializa una variable llamada contador
para llevar un registro del número total de veces que se encuentra la palabra buscada. Esto se hace para mostrar el número total de las veces que se encuentra la palabra buscada. Después comienza a leer el archivo línea por línea.
- Para cada línea leída, se incrementa el contador de número de líneas (
numero_linea
). - Luego, se verifica si la línea contiene la palabra buscada (
palabra_a_buscar
). Si es así, se muestra un mensaje en amarillo indicando que la palabra ha sido encontrada en la línea actual, junto con el número de línea y la línea misma. - Después de mostrar la información, se incrementa el contador de coincidencias (
contador
) para llevar un registro de cuántas veces se ha encontrado la palabra que estamos buscando

- En caso de no encontrar palabras, el script nos mostrará que no se han encontrado coincidencias con la palabra buscada dentro del archivo indicado.
Mostrando el Resultado
Al final de la búsqueda, el script muestra un separador y luego muestra el número total de veces que se encontró la palabra buscada. El resultado se presenta de la siguiente manera:

- Si la palabra no se encuentra en ninguna parte del archivo, se muestra un mensaje en rojo indicando que la palabra no se ha encontrado.
- Si se encuentra una sola vez, se muestra un mensaje en amarillo indicando que la palabra se encontró una vez.
- Si se encuentra más de una vez, se muestra un mensaje en amarillo indicando el número total de veces que se encontró la palabra.
Esto lo hice así para poder diferenciar entre vez y veces. Además de que se ve el mensaje descrito para indicar que no se han encontrado coincidencias.
El código para buscar palabras en archivo utilizando bash
Para utilizar este código, basta con copiar las siguientes líneas y utilizando tu editor de texto favorito, solo hay que pegar estas líneas dentro del archivo y guardarlo. A este script yo le he llamado busqueda-linea.sh. Pero cada uno que lo llame como quiera.
#!/bin/bash # Colores ANSI VERDE='\033[0;32m' AMARILLO='\033[1;33m' ROJO='\033[0;31m' NC='\033[0m' # No Color # Pedir al usuario la palabra a buscar read -p "Escribe la palabra que quieres buscar: " palabra_a_buscar # Pedir al usuario el nombre del archivo read -p "Escribe el nombre del archivo en el que quieres buscar: " archivo # Verificar si el archivo existe if [ ! -f "$archivo" ]; then echo "" echo -e "${ROJO}El archivo $archivo no existe${NC}" echo "" exit 1 fi # Inicializar la variable para contar el número de veces que se encuentra la palabra contador=0 echo "" # Bucle que lee línea por línea desde el archivo especificado en la variable $archivo while IFS= read -r linea; do # Incrementa el contador de número de líneas numero_linea=$((numero_linea + 1)) # Comprueba si la línea contiene la palabra buscada ($palabra_a_buscar) if [[ "$linea" == *"$palabra_a_buscar"* ]]; then # Muestra un mensaje indicando que la palabra fue encontrada en la línea actual echo -e "${AMARILLO}La palabra buscada ${NC} ${VERDE}$palabra_a_buscar${NC} ${AMARILLO}ha sido encontrada en la línea${NC} ${VERDE}$numero_linea${NC}: $linea" # Imprime una línea en blanco para separar las coincidencias echo "" # Incrementa el contador de coincidencias contador=$((contador + 1)) fi done < "$archivo" echo "===================================================================================" echo "" # Mostrar el número total de veces que se encontró la palabra if [ "$contador" -eq 0 ]; then echo -e "${ROJO}La palabra${NC} ${VERDE}$palabra_a_buscar${NC} ${ROJO}no se ha encontrado ninguna vez${NC}" echo "" elif [ "$contador" -eq 1 ]; then echo -e "${AMARILLO}La palabra${NC} ${VERDE}$palabra_a_buscar${NC} ${AMARILLO}se encontró un total de${NC} ${VERDE}$contador${NC} ${AMARILLO}vez.${NC}" echo "" else echo -e "${AMARILLO}La palabra${NC} ${VERDE}$palabra_a_buscar${NC} ${AMARILLO}se encontró un total de${NC} ${VERDE}$contador${NC} ${AMARILLO}veces.${NC}" echo "" fi
Una vez guardado el archivo, desde la terminal, podemos darle permiso de ejecución al archivo con el comando:
sudo chmod +x busqueda-linea.sh
Este script de Bash puede llegar a ser una herramienta valiosa para buscar palabras clave en archivos de texto concretos. Su uso de colores ANSI intenta mejora la legibilidad de los mensajes, buscando hacer el código accesible para aquellos que no están familiarizados con Bash.
El código que se puede ver en esta página, también lo he subido a su correspondiente repositorio en GitHub, para quien lo quiera.