Grep

Grep

Intermedia

Introducción

Has conseguido un trabajo en una biblioteca local, donde ayudas a organizar su colección de libros antiguos. Los estudiantes que la visitan suelen andar buscando citas que recuerdan a medias para citarlas en sus trabajos finales. En lugar de leer manualmente cada libro de principio a fin, decides crear una pequeña herramienta que los escanee en busca de esas citas parciales.

Instrucciones

Busca en los archivos las líneas que coincidan con un string de búsqueda y devuelve todas las líneas que coincidan.

El comando grep de Unix busca en los archivos las líneas que coinciden con una expresión regular. Tu tarea es implementar una versión simplificada del comando grep, que permita buscar strings fijos.

El comando grep recibe tres argumentos:

  1. El string que hay que buscar.
  2. Cero o más banderas para personalizar el comportamiento del comando.
  3. Uno o más archivos en los que buscar.

Después lee el contenido de los archivos indicados (en el orden indicado), encuentra las líneas que contienen el string de búsqueda y, por último, devuelve esas líneas en el orden en que las encontró. Cuando busca en varios archivos, cada línea coincidente va precedida por el nombre del archivo y dos puntos (':').

Banderas

El comando grep admite las siguientes banderas:

  • -n Antepone el número de línea y dos puntos (':') a cada línea de la salida, colocando el número después del nombre del archivo (si lo hay).
  • -l Muestra únicamente los nombres de los archivos que contienen al menos una línea coincidente.
  • -i Compara sin distinguir entre mayúsculas y minúsculas.
  • -v Invierte el programa: recoge todas las líneas que no coincidan.
  • -x Busca únicamente las líneas en las que el string de búsqueda coincide con la línea completa.

Usar grep o no usar grep, esa es la cuestión

Aunque este ejercicio se puede resolver de forma trivial con solo pasarle los argumentos a grep, implementa este ejercicio usando únicamente bash. El objetivo de este track de Exercism es aprender a usar los comandos integrados de bash para resolver problemas.

Para resolver este ejercicio, vas a necesitar:

  • analizar los argumentos de la línea de comandos: getopts es útil para esto.
  • recorrer las líneas de un archivo: esto es la pregunta frecuente número 1 de bash
  • usar la coincidencia de expresiones regulares: bash puede hacerlo con el operador =~ dentro de [[ ... ]]

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Bash Exercism

¿Todo listo para empezar Grep?

Regístrate en Exercism para aprender y dominar Bash con 97 ejercicios y mentoría humana real, todo gratis.