Linux / Befehl tac: Zeilen in umgekehrter Reihenfolge drucken
Der tac-Befehl druckt Datensätze vom letzten Datensatz bis zum ersten. Da ein Zeilenumbruch der Standard-Datensatztrenner ist, ist er nützlich, um ein Textprotokoll von der neuesten Zeile rückwärts zu überprüfen oder die aktuelle Zeilenreihenfolge einer Datei umzukehren.
Sein Name ist cat rückwärts geschrieben. Er kehrt Datensätze um, nicht einzelne Bytes oder Zeichen. Wenn mehrere Dateien angegeben werden, verarbeitet er die Dateien in der Operandenreihenfolge, während die Datensätze innerhalb jeder Datei umgekehrt werden.
Ergänzende Befehle und Anwendungsfälle finden Sie in Essenzielle Linux-Befehle: Ein praktisches Nachschlagewerk nach Aufgabe.
Grundlegende Syntax
tac [OPTION]... [FILE]...
Optionen und Randfälle können je nach Implementierung und Version variieren. Überprüfen Sie tac --help und man tac auf dem Zielsystem, bevor Sie sich auf implementierungsspezifisches Verhalten verlassen.
Grundlegende Verwendung von tac
Die Zeilen einer Datei umkehren
Die letzte Zeile wird die erste Zeile der Ausgabe.
tac events.log
Mehrere Dateien verarbeiten
Jede Eingabe wird unabhängig umgekehrt, während die Reihenfolge der Dateioperanden unverändert bleibt.
tac january.log february.log
Standardeingabe umkehren
Eine Pipeline kann die Eingabe liefern, aber tac muss das Ende erreichen, bevor es den ersten umgekehrten Datensatz ausgeben kann.
printf 'one\ntwo\nthree\n' | tac
Ergebnis des Umkehrens der Zeilenreihenfolge
tac kehrt nicht die Zeichen um, sondern gibt die Zeilen in umgekehrter Reihenfolge aus. Die Reihenfolge der Zeichen innerhalb jeder Zeile bleibt gleich.
printf 'first\nsecond\nthird\n' | tac
Beispielausgabe:
third second first
Es ist nützlich beim Lesen von Protokollen, die sich in chronologischer Reihenfolge ab der neuesten Zeile ansammeln, aber es ist nicht dasselbe wie das Sortieren nach Zeitstempeln.
Wichtige Optionen
| Option | Zweck |
|---|---|
-s STRING |
Verwenden Sie STRING anstelle von Zeilenumbruch als Datensatztrennzeichen. |
-b |
Fügen Sie den Trenner vor dem Datensatz an, anstatt ihn danach zu setzen. |
-r |
Interpretieren Sie das Trennzeichen als regulären Ausdruck. |
--help |
Zeigen Sie die von der installierten Implementierung unterstützten Optionen an. |
Praktische Beispiele
Durchsuchen Sie ein Protokoll von neu nach alt
Kombinieren Sie tac mit einem Pager, sodass die umgekehrte Ausgabe weiterhin durchsuchbar bleibt.
tac application.log | less
Verwenden Sie einen benutzerdefinierten Datensatztrenner
GNU tac kann Datensätze umkehren, die durch einen anderen String als das Newline-Zeichen getrennt sind.
tac -s '---' records.txt
Finden Sie die jüngste passende Zeile
Drehen Sie das Protokoll um und stoppen Sie grep nach dem ersten Treffer.
tac access.log | grep -m 1 'ERROR'
tac und verwandte Befehle
| Befehl | Hauptrolle | Geeignet für |
|---|---|---|
tac |
Vorhandene Datensatzreihenfolge umkehren | Eine Datei von unten lesen |
cat |
Originalreihenfolge beibehalten | Dateien anzeigen und zusammenfügen |
tail |
Wählen Sie den letzten Abschnitt aus | Nur die letzten Zeilen anzeigen |
sort -r |
Werte in absteigender Reihenfolge sortieren | Nach Inhalt sortieren |
Wichtige Hinweise
Es ist kein Sortierbefehl
Der Befehl interpretiert keine Zeitstempel oder Werte; er kehrt nur die aktuelle Datensatzreihenfolge um.
Unbegrenzte Datenströme können nicht sofort umgekehrt werden
Das Ende der Eingabe muss bekannt sein, daher ist tac für einen Strom, der nie endet, nicht geeignet.
Trennzeichen-Portabilität prüfen
Hier beschriebene benutzerdefinierte Trennzeichen- und reguläre-Ausdruck-Verhalten folgen GNU tac und können anderswo abweichen.
FAQ
Sind tac und sort -r gleichwertig?
Nein. tac kehrt die aktuelle Reihenfolge um, während sort -r Werte vergleicht und sortiert.
Wie kann ich nur die letzten zehn Zeilen umkehren?
Verwenden Sie tail -n 10 FILE | tac.
Kann tac einem Live-Protokoll folgen?
Nicht sinnvoll, da es das Ende der Eingabe benötigt. Verwenden Sie tail -f für die Live-Überwachung.
Führt tac alle Eingabedateien zusammen, bevor es sie umkehrt?
Normalerweise verarbeitet es jede Datei in der Operandenreihenfolge und kehrt die Datensätze innerhalb dieser Datei um.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils tac-Dokumentation.




