Mit welchem Kommando können Sie einen Bereich der Datei bla.txt ausgeben,
der mit einer Zeile mit ANFANG am Anfang beginnt und mit einer Zeile mit
ENDE am Anfang endet?
sed -n '/^ANFANG/,/^ENDE/p' bla.txt
grep '^ANFANG' bla.txt | grep '^ENDE'
grep '^ANFANG' | grep '^ENDE' bla.txt
cut ANFANG-ENDE bla.txt
LPI-Lernziel Textdateien mit regulären Ausdrücken durchsuchen (103.7)
grep (Antworten 2 und 3) wirkt immer nur auf einzelne Zeilen.
In Antwort 2 würde das erste grep alle Zeilen durchlassen, die
mit ANFANG anfangen, und das zweite in dieser Ausgabe nach Zeilen suchen,
die mit ENDE anfangen -- eine logische Unmöglichkeit. Die Ausgabe des
Kommandos dürfte also leer sein, was nicht im Sinne der Aufgabenstellung ist.
Antwort 3 leidet außerdem an einer weiteren logischen Unmöglichkeit;
wenn grep wie im zweiten Teil des Kommandos einen Dateinamen übergeben
bekommt, ignoriert es seine Standardeingabe, also liefert das Kommando
insgesamt alle Zeilen aus bla.txt, die mit ENDE anfangen -- ebenfalls
falsch.
cut (Antwort 4) dient dazu, bestimmte Spalten oder Felder aus der
Eingabe zu extrahieren, es schneidet also »vertikal« und nicht »horizontal«.
Durch diesen philosophischen Irrtum kann es also auch nicht die richtige
Wahl sein; die für cut falsche und verquere Parametersyntax kann es auch
nicht mehr schlimmer machen.
Die einzig richtige Lösung in der Auswahl ist Antwort 1. sed -n
arbeitet die Datei bla.txt ohne Ausgabe ab, und nur die Zeilen in
einem Bereich zwischen einer ANFANG- und einer ENDE-Zeile werden
explizit ausgegeben (das p-Kommando). Das funktioniert auch, wenn die
Datei mehrere solche Bereiche enthält!
Nicht angemeldet