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.

Parole

Implementa:

  • grep ( pattern flags files -- lines )

pattern è la stringa da cercare, flags è un array di zero o più tra le stringhe di flag "-n", "-l", "-i", "-v" e "-x", e files è un array di uno o più nomi di file. Restituisci le righe corrispondenti (con gli eventuali prefissi richiesti di nome del file e numero di riga) come array di stringhe.

Quando è presente il flag -l, restituisci un array con i nomi dei file che contengono almeno una corrispondenza.

Leggere i file

Leggi le righe di un file con file-lines, passando una codifica:

USING: io.encodings.utf8 io.files ;

"iliad.txt" utf8 file-lines
! => { "Achilles sing, O Goddess! Peleus' son;" ... }

I tre file di prova (iliad.txt, midsummer-night.txt e paradise-lost.txt) arrivano insieme all'esercizio nella directory di lavoro, quindi basta leggerli per nome.

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

Vuoi iniziare Grep?

Iscriviti a Exercism per imparare e padroneggiare Factor con 47 concetti163 esercizi e il mentoring di persone reali, tutto gratis.