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 Dateiope­randen 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.