GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich das letzte Auftreten eines Musters und drucke alle Zeilen nach dem letzten Auftreten?

Für diese Frage gibt es hier bereits Antworten :Text vom letzten Marker zu EOF in POSIX.2 bringen

(5 Antworten)
Vor 2 Jahren geschlossen.

Ich habe eine Datei, die das Muster “====“ mehrfach enthält . Diesen Mustern folgen Texte. Ich möchte nach dem letzten Vorkommen von “====” suchen Muster und drucken Sie alle Linien nach dem Muster. Irgendwelche Ideen, wie man es in Bash macht? Kombination aus grep , awk , sed oder tail , usw.?

Beispieldatei:

====

First run of script

End of first Script

====

2nd run of script

End of 2nd script

====

3rd run of script

End of 3rd script

Die Ausgabe des Befehls sollte wie folgt aussehen.

3rd run of script

End of 3rd script

Akzeptierte Antwort:

Software-Tool-Methode, effizienter für große Dateien, da sie nur das Ende der Datei liest und dann stoppt, wenn sie die letzte Übereinstimmung findet:

tac sample.txt | grep -F -m1 -B 999999 '====' | head -n -1 | tac

Hinweis:Erhöhen oder verringern Sie 999999 nach Bedarf, nur damit es länger ist als jedes mögliche Streichholz. Dieser Code funktioniert am besten, wenn im Voraus bekannt ist, dass sich die letzte Übereinstimmung am Ende einer großen Datei befindet. Siehe auch Glenn Jackman ’s Antwort mit Varianten für awk und sed die die Notwendigkeit von 999999 vermeiden . Für Systeme mit sehr geringen Ressourcen, grep ist effizienter als awk oder sed .

Um Raten zu vermeiden, wurde stat hinzugefügt Hässlichkeit würde funktionieren:

f=sample.txt; tac "$f" | grep -F -m1 -B $(stat -c '%s' "$f") '====' |
head -n -1 | tac

Linux
  1. Wie finde ich die Anzahl der im Terminal verfügbaren vertikalen Linien?

  2. So finden Sie alle Sparse-Dateien in Linux

  3. Verwenden Sie awk, um alle Spalten von der n-ten bis zur letzten zu drucken

  4. So erhalten Sie alle Dateien, die eine bestimmte Größe überschreiten, und löschen sie

  5. So verwenden Sie sed, um die letzten n Zeilen einer Datei zu entfernen

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

So finden Sie die PID und PPID eines Prozesses in Linux

So installieren und verwenden Sie den Ack-Befehl unter Linux

Wie kann ich grep die Zeilen unter und über jeder übereinstimmenden Zeile drucken lassen?

Wie drucke ich die letzte Zeile einer gz-komprimierten Datei in der Befehlszeile?