Ich möchte alle Zeilen vor einer Übereinstimmung anzeigen, nicht nur 10 oder 7 oder 14 zum Beispiel, wie in Wie rufe ich Zeilen vor/nach dem grep-Ergebnis in bash? erklärt.
Wie kann ich es tun? Es spielt keine Rolle, ob die übereinstimmende Zeile enthalten ist oder nicht.
Zum Beispiel statt:
... | grep -B 10 -- "foo"
Ich möchte:
... | grep -B -- "foo"
Aber dieser letzte Code funktioniert nicht.
Akzeptierte Antwort:
-
Einschließlich des Spiels
sed '/foo/q' fileEs ist besser q uit
sedsobald eine Übereinstimmung gefunden wird, sonstsedwürde die Datei weiterlesen und Ihre Zeit verschwenden, was bei großen Dateien erheblich wäre. -
Ohne die Übereinstimmung,
sed -n '/foo/q;p' fileDas
-nFlag bedeutet, dass nur Zeilen, die denperreichen, angezeigt werden Befehl wird gedruckt. Da diefooZeile löst dasqaus uit-Aktion erreicht espnicht und wird daher nicht gedruckt.-
Wenn Ihr
sedGNU ist, kann dies vereinfacht werden zused '/foo/Q' file
-
Referenzen
/foo/— Adressenq,p— Häufig verwendete BefehleQ— GNU Sed erweiterte Befehle-n— Befehlszeilenoptionen