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.

Ruta de PowerShell

Cambio en los flags

PowerShell admite parámetros de tipo switch en las funciones, que se comportan de manera similar a los flags de la línea de comandos.

Siguiendo la costumbre de PowerShell de usar nombres detallados y explícitos para los cmdlets y sus propiedades, los flags que se usan en este ejercicio también cambiaron de nombre para reflejar el lenguaje.

  • Line (-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 está presente).
  • File (-l): Muestra solo los nombres de los archivos que contienen al menos una línea que coincide.
  • Insensitive (-i): Compara sin distinguir mayúsculas y minúsculas.
  • Invert (-v): Invierte el programa: recopila todas las líneas que no coinciden.
  • Whole (-x): Busca solo las líneas en las que el string de búsqueda coincide con toda la línea.

Manejo de archivos

Tu enfoque principal debe ser implementar la función grep y no preocuparte por obtener correctamente la ruta a los archivos.

Este ejercicio proporcionará 3 archivos de texto requeridos: iliad.txt, midsummer-night.txt y paradise-lost.txt en el conjunto de pruebas; puedes acceder a su contenido con Get-Content usando el nombre como string en lugar de la ruta de archivo habitual.

Cmdlet

PowerShell sí tiene un cmdlet similar a grep llamado Select-String, y puedes leer más sobre él aquí si te interesa. No debes usar Select-String para este ejercicio en ningún momento.

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

¿Todo listo para empezar Grep?

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