Grep: nur die 2. Zeile oben anzeigen

Grep: nur die 2. Zeile oben anzeigen

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 sedund/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 fooals 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

verwandte Informationen