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.

El proceso de Node

A diferencia de otros ejercicios, grep.js no se importa dentro del archivo de pruebas grep.spec.js. En su lugar, se usará como si fuera un ejecutable. Para facilitarlo, el archivo grep.js se ha preparado con un shebang y un comentario que explica qué hace:

#!/usr/bin/env node

// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)

Las pruebas iniciarán un nuevo proceso de node, ejecutando grep.js.

Lectura de argumentos

Para recuperar los argumentos con los que se inició el proceso, usa process.argv.

Lectura de archivos

Se ha proporcionado la función readLines. No es necesario transformar la ruta del archivo para usarla. La función readlines resolverá la ruta desde el directorio de trabajo actual, que, para los procesos de grep.js, está establecido en el directorio del ejercicio.

Escritura de la salida

Para escribir la salida, usa:

  • console.log para escribir en el flujo de salida estándar,
  • console.error para escribir en el flujo de error estándar.

Las pruebas consideran que la ejecución ha tenido éxito (se ha resuelto) si no se escribe nada en el flujo de error estándar, y que no ha tenido éxito (se ha rechazado) si se escribe algo en el flujo de error estándar.

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

¿Listo para empezar Grep?

Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.