
Nehmen wir an, ich habe eine Textdatei mit dem Inhalt:
foo
bar
whatever
something I don't know
bar2
whatever
Und als Ergebnis des Ausführens grep whatever myfile.txt
(und/oder sed
und/oder awk
) hätte ich gerne:
foo
something I don't know
Ich habe versucht, die Option zu verwenden -B 2
, aber das gibt sowohl foo
als auch aus bar
.
Das geht nicht ... | grep -v bar
, da es viele unterschiedliche Datensätze gibt.
Antwort1
Kein grep, sollte aber funktionieren:
awk '/grep_string/ {drucke eine} {a=b;b=$0}' Datei
Antwort2
Hier ist meine Lösung, da ich keine Möglichkeit gefunden habe, dies umzusetzen:
Als mir Inhaltsblöcke zurückgegeben wurden, sagen Sie:
foo
bar
whatever
--
foo2
bar2
whatever
--
und so weiter. Ich habe den Trenner von grep verwendet und die nächste Zeile wie folgt erhalten und sie dann entfernt:
grep -B2 whatever myfile.txt | grep -v whatever | grep -A 1 -E '\-\-' | grep -v -E '\-\-'
Und das gibt einfach aus:
foo
foo2