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' file
Es ist besser q uit
sed
sobald eine Übereinstimmung gefunden wird, sonstsed
würde die Datei weiterlesen und Ihre Zeit verschwenden, was bei großen Dateien erheblich wäre. -
Ohne die Übereinstimmung,
sed -n '/foo/q;p' file
Das
-n
Flag bedeutet, dass nur Zeilen, die denp
erreichen, angezeigt werden Befehl wird gedruckt. Da diefoo
Zeile löst dasq
aus uit-Aktion erreicht esp
nicht und wird daher nicht gedruckt.-
Wenn Ihr
sed
GNU ist, kann dies vereinfacht werden zused '/foo/Q' file
-
Referenzen
/foo/
— Adressenq
,p
— Häufig verwendete BefehleQ
— GNU Sed erweiterte Befehle-n
— Befehlszeilenoptionen