Grep

Grep

Medio

Introduzione

Hai trovato lavoro in una biblioteca locale, dove aiuti a organizzare la collezione di libri antichi. Gli studenti che la frequentano sono spesso a caccia di citazioni ricordate a metà, da inserire nelle loro tesine. Invece di leggere a mano ogni libro da cima a fondo, decidi di costruire un piccolo strumento che li analizzi, cercando proprio queste citazioni parziali.

Istruzioni

Cerca nei file le righe che corrispondono a una stringa di ricerca e restituisci tutte le righe corrispondenti.

Il comando Unix grep cerca nei file le righe che corrispondono a un'espressione regolare. Il tuo compito è implementare una versione semplificata del comando grep, che supporta la ricerca di stringhe fisse.

Il comando grep accetta tre argomenti:

  1. La stringa da cercare.
  2. Zero o più flag per personalizzare il comportamento del comando.
  3. Uno o più file in cui cercare.

Poi legge il contenuto dei file specificati (nell'ordine indicato), trova le righe che contengono la stringa di ricerca e infine restituisce quelle righe nell'ordine in cui sono state trovate. Quando cerca in più file, ogni riga corrispondente è preceduta dal nome del file e dai due punti (':').

Flag

Il comando grep supporta i seguenti flag:

  • -n Anteponi il numero di riga e i due punti (':') a ogni riga dell'output, mettendo il numero dopo il nome del file (se presente).
  • -l Restituisci solo i nomi dei file che contengono almeno una riga corrispondente.
  • -i Confronta ignorando la differenza tra maiuscole e minuscole.
  • -v Inverti il programma: raccogli tutte le righe che non corrispondono.
  • -x Cerca solo le righe in cui la stringa di ricerca corrisponde all'intera riga.

Il processo Node

A differenza degli altri esercizi, grep.js non viene importato all'interno del file di test grep.spec.js. Verrà invece usato come se fosse un eseguibile. Per rendere possibile tutto questo, il file grep.js è stato impostato con uno shebang ed un commento che spiega a cosa serve:

#!/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)

I test avvieranno un nuovo processo Node che eseguirà grep.js.

Leggere gli argomenti

Per recuperare gli argomenti con cui è stato avviato il processo, usa process.argv.

Leggere i file

La funzione readLines è già disponibile. Non serve trasformare il percorso del file per usarla. La funzione readlines risolve il percorso a partire dalla directory di lavoro corrente che, per i processi di grep.js, è impostata sulla directory dell'esercizio.

Scrivere l'output

Per scrivere l'output usa

  • console.log per scrivere sul flusso di output standard,
  • console.error per scrivere sul flusso di errore standard.

I test considerano l'esecuzione riuscita (resolved) se non viene scritto nulla sul flusso di errore standard, e non riuscita (rejected) se qualcosa viene scritto sul flusso di errore standard.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Grep?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.