Grep

Grep

Media

Introducción

Has aceptado un trabajo en una biblioteca local para ayudar a organizar su colección de libros antiguos. Los estudiantes que acuden a ella suelen andar buscando citas que recuerdan a medias para incluirlas en sus trabajos de fin de curso. En lugar de leer a mano cada libro de principio a fin, decides crear una pequeña herramienta que los examine en busca de esas citas parciales.

Instrucciones

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

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

El comando grep acepta tres argumentos:

  1. El string que se debe buscar.
  2. Cero o más opciones para personalizar el comportamiento del comando.
  3. Uno o más ficheros en los que buscar.

A continuación, lee el contenido de los ficheros 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 se encontraron. Cuando se busca en varios ficheros, cada línea coincidente va precedida por el nombre del fichero y dos puntos (':').

Opciones

El comando grep admite las siguientes opciones:

  • -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 fichero (si lo hay).
  • -l Muestra solo los nombres de los ficheros 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 solo las líneas en las que el string de búsqueda coincide con la línea completa.

Track de Powershell

Cambio de banderas

Powershell admite parámetros de conmutación para las funciones, que se comportan de forma parecida a las banderas de la línea de comandos.

Siguiendo la costumbre de Powershell de tener nombres detallados y verbosos para los cmdlets y sus propiedades, las banderas que se usan en este ejercicio también han cambiado de nombre para reflejar el lenguaje.

  • Line (-n): Antepón a cada línea de la salida el número de línea y dos puntos («:»), colocando el número después del nombre del fichero (si lo hay).
  • File (-l): Muestra solo los nombres de los ficheros que contienen al menos una línea que coincide.
  • Insensitive (-i): Busca coincidencias sin distinguir entre mayúsculas y minúsculas.
  • Invert (-v): Invierte el programa: recoge todas las líneas que no coincidan.
  • Whole (-x): Busca solo las líneas en las que el string de búsqueda coincide con la línea completa.

Gestión de ficheros

Tu objetivo principal debe ser implementar la función grep y no preocuparte por obtener correctamente la ruta de los ficheros.

Este ejercicio te proporcionará 3 ficheros de texto obligatorios: iliad.txt, midsummer-night.txt y paradise-lost.txt en el conjunto de pruebas; puedes acceder a su contenido con Get-Content usando el string del nombre en lugar de la ruta de fichero 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 en ningún momento para este ejercicio.

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

¿Listo para empezar Grep?

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