Grep

Grep

Mittel

Einführung

Du hast einen Job in einer örtlichen Bibliothek angenommen und hilfst dabei, die Sammlung alter Bücher zu ordnen. Die Studierenden, die dort lesen, suchen oft nach halb vergessenen Zitaten, die sie in ihren Hausarbeiten anführen wollen. Statt jedes Buch von Hand von vorne bis hinten zu lesen, beschließt du, ein kleines Tool zu bauen, das die Bücher durchsucht und nach diesen Zitatfragmenten sucht.

Anleitung

Durchsuche Dateien nach Zeilen, die zu einem Suchstring passen, und gib alle passenden Zeilen zurück.

Der Unix-Befehl grep durchsucht Dateien nach Zeilen, die zu einem regulären Ausdruck passen. Deine Aufgabe ist es, einen vereinfachten grep-Befehl zu implementieren, der die Suche nach festen Strings unterstützt.

Der grep-Befehl nimmt drei Argumente entgegen:

  1. Den String, nach dem gesucht wird.
  2. Null oder mehr Flags, mit denen du das Verhalten des Befehls anpassen kannst.
  3. Eine oder mehrere Dateien, in denen gesucht wird.

Anschließend liest er den Inhalt der angegebenen Dateien (in der angegebenen Reihenfolge), findet die Zeilen, die den Suchstring enthalten, und gibt diese Zeilen schließlich in der Reihenfolge zurück, in der sie gefunden wurden. Bei der Suche in mehreren Dateien wird jeder passenden Zeile der Dateiname und ein Doppelpunkt (':') vorangestellt.

Flags

Der grep-Befehl unterstützt die folgenden Flags:

  • -n Stellt jeder Zeile in der Ausgabe die Zeilennummer und einen Doppelpunkt (':') voran und setzt die Nummer hinter den Dateinamen (falls vorhanden).
  • -l Gibt nur die Namen der Dateien aus, die mindestens eine passende Zeile enthalten.
  • -i Vergleicht ohne Berücksichtigung der Groß- und Kleinschreibung.
  • -v Kehrt das Programm um: Sammelt alle Zeilen, die nicht passen.
  • -x Sucht nur nach Zeilen, in denen der Suchstring mit der gesamten Zeile übereinstimmt.

Node-Prozess

Anders als bei anderen Übungen wird grep.js nicht in die Testdatei grep.spec.js importiert. Stattdessen wird es verwendet, als wäre es eine ausführbare Datei. Damit das funktioniert, wurde die Datei grep.js mit einem Shebang und einem Kommentar eingerichtet, der erklärt, was dieser bewirkt:

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

Die Tests starten einen neuen Node-Prozess, der grep.js ausführt.

Argumente lesen

Um die Argumente abzurufen, mit denen der Prozess gestartet wurde, verwendest du process.argv.

Dateien lesen

Die Funktion readLines ist bereits vorhanden. Du musst den Dateipfad nicht umwandeln, um sie zu verwenden. Die Funktion readlines löst den Pfad ausgehend vom aktuellen Arbeitsverzeichnis auf, das für die grep.js-Prozesse auf das Übungsverzeichnis gesetzt ist.

Ausgabe schreiben

Um Ausgaben zu schreiben, verwendest du

  • console.log, um in die Standardausgabe zu schreiben,
  • console.error, um in die Standardfehlerausgabe zu schreiben.

Die Tests betrachten die Ausführung als erfolgreich (resolved), wenn nichts in die Standardfehlerausgabe geschrieben wird, und als nicht erfolgreich (rejected), wenn etwas in die Standardfehlerausgabe geschrieben wird.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Grep zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.