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.
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:
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.
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.PowerShell unterstützt Switch-Parameter für Funktionen, die sich ähnlich wie Flags auf der Kommandozeile verhalten.
Ganz im Sinne von PowerShells Gepflogenheit, detaillierte und ausführliche Namen für Cmdlets und deren Eigenschaften zu verwenden, wurden auch die in dieser Übung verwendeten Flags umbenannt, um die Sprache widerzuspiegeln.
Line (-n): Stelle jeder Zeile in der Ausgabe die Zeilennummer und einen Doppelpunkt (':') voran und setze die Nummer hinter den Dateinamen (falls vorhanden).File (-l): Gib nur die Namen der Dateien aus, die mindestens eine übereinstimmende Zeile enthalten.Insensitive (-i): Vergleiche ohne Beachtung der Groß-/Kleinschreibung.Invert (-v): Invertiere das Programm: Sammle alle Zeilen, die nicht übereinstimmen.Whole (-x): Suche nur nach Zeilen, bei denen der Suchstring mit der gesamten Zeile übereinstimmt.Auf die Implementierung der grep-Funktion sollte dein Hauptaugenmerk liegen; um den korrekten Pfad zu den Dateien musst du dich nicht kümmern.
In dieser Übung werden 3 erforderliche Textdateien bereitgestellt: iliad.txt, midsummer-night.txt und paradise-lost.txt in der Testsuite. Auf ihren Inhalt kannst du einfach mit Get-Content zugreifen, indem du den Namensstring anstelle des üblichen Dateipfads verwendest.
PowerShell hat tatsächlich ein Cmdlet, das grep ähnelt und Select-String heißt. Wenn du interessiert bist, kannst du hier mehr darüber lesen.
Select-String solltest du in dieser Übung an keiner Stelle verwenden.
Melde dich bei Exercism an, um PowerShell mit 136 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.