Inicio Apuntes FPApuntes DAM Buscar palabras en archivos de texto utilizando este script Bash

Buscar palabras en archivos de texto utilizando este script Bash

Publicado por entreunosyceros
Publicado el: Última actualización:

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:

  1. La palabra que el usuario quiere buscar.
  2. El nombre del archivo en el que se realizará la búsqueda.

Verificando la Existencia del Archivo

Sin archivo para buscar palabras

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
palabra sin encontrar
  • 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:

resultado de buscar palabras en archivos
  • 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.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.