So verwenden Sie die Linux-Befehle cat und tac

Die cat und tac Befehle zeigen den Inhalt von Textdateien an, aber sie haben mehr zu bieten, als man denkt. Tauchen Sie ein wenig tiefer ein und lernen Sie einige produktive Linux-Befehlszeilen-Tricks.

Dies sind zwei einfache kleine Befehle, die oft als genau das abgetan werden – zu einfach, um wirklich nützlich zu sein. Wenn Sie jedoch die verschiedenen Verwendungsmöglichkeiten kennen, werden Sie feststellen, dass sie bei der Arbeit mit Dateien einen angemessenen Teil der schweren Arbeit leisten können.

Das Katzenkommando

cat wird benutzt um den Inhalt von Textdateien untersuchen, und Teile von Dateien zu einer größeren Datei zusammenzufügen.

Auf einmal – zurück in der Ära der Einwahl Modem—Binärdateien wurden oft in mehrere kleinere Dateien aufgeteilt, um das Herunterladen zu erleichtern. Anstatt eine große Datei herunterzuladen, haben Sie jede kleinere Datei zurückgezogen. Wenn eine einzelne Datei nicht korrekt heruntergeladen werden konnte, würden Sie diese eine Datei einfach erneut abrufen.

Natürlich brauchten Sie dann eine Möglichkeit, die Sammlung kleinerer Dateien wieder in die einzige funktionierende Binärdatei zu rekonstruieren. Dieser Vorgang wurde als Verkettung bezeichnet. Und das ist wo cat kam und woher es seinen Namen hat.


Breitband- und Glasfaserverbindungen haben dazu geführt, dass dieses besondere Bedürfnis nachgelassen hat – ähnlich wie kreischende Einwahlgeräusche – also was bleibt? cat heute zu tun? Eigentlich ziemlich viel.

Anzeigen einer Textdatei

Haben cat Listen Sie den Inhalt einer Textdatei in einem Terminalfenster auf, verwenden Sie den folgenden Befehl.

Stellen Sie sicher, dass die Datei eine Textdatei ist. Wenn Sie versuchen, den Inhalt einer Binärdatei im Terminalfenster aufzulisten, sind die Ergebnisse unvorhersehbar. Sie könnten mit einer gesperrten Terminalsitzung oder Schlimmerem enden.

cat poem1.txt

Der Inhalt der Datei poet1.txt wird im Terminalfenster angezeigt.

Das ist nur die Hälfte des berühmten Gedichts. Wo ist der Rest? Es gibt hier eine weitere Datei namens poet2.txt. Wir können machen cat listet den Inhalt mehrerer Dateien mit einem Befehl auf. Alles, was wir tun müssen, ist die Dateien der Reihe nach in der Befehlszeile aufzulisten.

cat poem1.txt poem2.txt

Das sieht besser aus; Wir haben jetzt das ganze Gedicht.

Katze mit weniger verwenden

Das Gedicht ist alles da, aber es schoss zu schnell am Fenster vorbei, um die ersten paar Verse zu lesen. Wir können die Ausgabe von weiterleiten cat hinein less und scrollen Sie in unserem eigenen Tempo durch den Text.

cat poem1.txt poem2.txt | less


Wir können jetzt in einem Stream vorwärts und rückwärts durch den Text gehen, obwohl er in zwei separaten Textdateien gespeichert ist.

Nummerierung der Zeilen in einer Datei

Wir können die Zeilen in der Datei so nummerieren, wie sie angezeigt wird. Dazu verwenden wir die -n (Zahl)-Option.

cat -n poem1.txt

Die Zeilen werden so nummeriert, wie sie im Terminalfenster angezeigt werden.

Keine Leerzeilen nummerieren

Wir haben es geschafft, die Zeilen nummerieren zu lassen cat, aber auch die Leerzeilen zwischen den Versen werden gezählt. Um die Textzeilen zu nummerieren, aber die Leerzeilen zu ignorieren, verwenden Sie die -b (Zahlen ohne Leerzeichen) Option.

cat -b poem1.txt

Jetzt werden die Textzeilen nummeriert und die Leerzeilen werden übersprungen.

Nicht mehrere Leerzeilen anzeigen

Wenn eine Datei Abschnitte mit aufeinanderfolgenden Leerzeilen enthält, können wir fragen cat alle bis auf eine leere Zeile ignorieren. Sehen Sie sich diese Datei an.


Der nächste Befehl verursacht cat um nur eine Leerzeile von jedem Leerzeilenbündel anzuzeigen. Die Option, die wir brauchen, um dies zu erreichen, ist die -s (Squeeze-Blank)-Option.

cat -s poem1.txt

Dies hat keinerlei Auswirkungen auf den Inhalt der Datei; es ändert nur den weg cat zeigt die Datei an.

Registerkarten anzeigen

Wenn Sie wissen möchten, ob Leerzeichen durch Leerzeichen oder Tabulatoren verursacht werden, können Sie dies mit dem -T (Tabs anzeigen) Option.

cat -T poem1.txt

Die Registerkarten werden durch die Zeichen „^I“ dargestellt.

Anzeigen der Zeilenenden

Sie können nach nachgestellten Leerzeichen suchen, indem Sie das -E (Show-Ends) Option.

cat -E poem1.txt

Die Zeilenenden werden durch das Zeichen „$“ dargestellt.

Verketten von Dateien

Es macht keinen Sinn, ein Gedicht in zwei Dateien mit jeweils einer Hälfte zu speichern. Lassen Sie uns sie zusammenfügen und eine neue Datei mit dem gesamten Gedicht darin erstellen.

cat poem1.txt poem2.txt > jabberwocky.txt

lass uns verwenden cat um unsere neue Datei zu überprüfen:

cat jabberwocky.txt


Unsere neue Datei enthält den Inhalt der anderen beiden Dateien.

Anhängen von Text an eine vorhandene Datei

Das ist besser, aber tatsächlich ist es nicht das ganze Gedicht. Der letzte Vers fehlt. Der letzte Vers in Jabberwocky ist der gleiche wie der erste Vers.

Wenn wir den ersten Vers in einer Datei haben, können wir ihn am Ende der Datei jabberwocky.txt hinzufügen, und wir haben das vollständige Gedicht.

In diesem nächsten Befehl müssen wir verwenden >>, nicht nur >. Wenn wir eine einzelne verwenden > wir überschreiben jabberwocky.txt. Das wollen wir nicht. Wir möchten Text an das Ende anhängen.

cat first_verse.txt >> jabberwocky.txt

Lassen Sie uns den Inhalt der Datei jabberwocky.txt überprüfen:

cat jabberwocky.txt

Und schließlich sind alle Teile des Gedichts zusammen.

Umleitung von stdin

Sie können Eingaben von der Tastatur in eine Datei umleiten mit cat. Alles, was Sie eingeben, wird in die Datei umgeleitet, bis Sie Strg+D drücken. Beachten Sie, dass wir ein einzelnes verwenden > weil wir die Datei erstellen (oder überschreiben, falls vorhanden).

cat > my_poem.txt


Wir können mit der Eingabe beginnen, sobald wir den Befehl eingeben. Wir drücken Strg+D, wenn wir fertig sind. Wir können dann den Inhalt der neuen Datei überprüfen mit:

cat my-poem.txt

Dieses Geräusch wie eine weit entfernte Turbine ist wahrscheinlich Lewis Carroll, der sich mit hoher Geschwindigkeit in seinem Grab dreht.

Das tac-Kommando

tac ist ähnlich wie cat, aber es listet den Inhalt von Dateien auf in umgekehrter Reihenfolge.

Sehen wir uns das an:

tac my_poem.txt

Und die Datei wird in umgekehrter Reihenfolge im Terminalfenster aufgelistet. In diesem Fall hat es keinen Einfluss auf seine literarischen Verdienste.

Verwenden von tac mit stdin

Verwenden von tac ohne Dateinamen führt dazu, dass es auf die Eingabe von der Tastatur reagiert. Wenn Sie Strg+D drücken, wird die Eingabephase gestoppt und tac listet in umgekehrter Reihenfolge auf, was Sie eingegeben haben.

tac

Wenn Strg+D gedrückt wird, wird die Eingabe umgekehrt und im Terminalfenster aufgelistet.

Verwenden von tac mit Protokolldateien

Abgesehen von minderwertigen Salontricks, kann tac etwas Nützliches tun? Ja, kann es. Viele Protokolldateien hängen ihre neuesten Einträge am Ende der Datei an. Verwenden von tac (und entgegen der Intuition, head) können wir den letzten Eintrag in das Terminalfenster einfügen.


Wir gebrauchen tac um die Syslog-Datei in umgekehrter Reihenfolge aufzulisten und in eine Pipe zu head. Durch Mitteilen head um nur die erste empfangene Zeile zu drucken (was dank tac ist die letzte Zeile in der Datei), sehen wir den neuesten Eintrag in der Syslog-Datei.

tac /var/log/syslog | head -1

head druckt den neuesten Eintrag aus der Syslog-Datei und wird dann beendet.

Beachten Sie, dass head druckt nur eine Zeile – wie wir es angefordert haben –, aber die Zeile ist so lang, dass sie zweimal umbrochen wird. Deshalb sieht es im Terminalfenster wie drei Ausgabezeilen aus.

Verwenden von Tac mit Textaufzeichnungen

Der letzte Trick tac hat im Ärmel ist eine Schönheit.

In der Regel, tac arbeitet mit Textdateien, indem sie diese Zeile für Zeile von unten nach oben durcharbeitet. Eine Zeile ist eine Folge von Zeichen, die durch ein Zeilenumbruchzeichen abgeschlossen wird. Aber wir können es sagen tac mit anderen Trennzeichen zu arbeiten. Dies ermöglicht es uns, „Datenblöcke“ innerhalb der Textdatei als Datensätze zu behandeln.

Nehmen wir an, wir haben eine Protokolldatei von einem Programm, die wir überprüfen oder analysieren müssen. Schauen wir uns das Format mit an less.

less logfile.dat


Wie wir sehen können, gibt es ein sich wiederholendes Format für die Datei. Es gibt Folgen von drei Zeilen von hexadezimal Werte. Jeder Satz von drei hexadezimalen Zeilen hat eine Beschriftungszeile, die mit „=SEQ“ beginnt, gefolgt von einer Ziffernfolge.

Wenn wir zum Ende der Datei scrollen, können wir sehen, dass viele dieser Datensätze vorhanden sind. Der letzte ist mit 865 nummeriert.

Nehmen wir an, wir müssen diese Datei aus welchem ​​Grund auch immer in umgekehrter Reihenfolge abarbeiten, Datensatz für Datensatz. Die Zeilenreihenfolge der drei hexadezimalen Zeilen in jedem Datensatz muss erhalten bleiben.

Beachten Sie, dass die letzten drei Zeilen der Datei mit den Hexadezimalwerten 93, E7 und B8 in dieser Reihenfolge beginnen.

Lass uns verwenden tac um die Datei umzukehren. Es ist eine sehr lange Datei, in die wir sie weiterleiten werden less.

tac logfile.dat | less

Das kehrt die Datei um, aber es ist nicht das Ergebnis, das wir wollen. Wir möchten, dass die Datei umgekehrt wird, aber die Zeilen in jedem Datensatz müssen in ihrer ursprünglichen Reihenfolge sein.


Wir haben zuvor aufgezeichnet, dass die letzten drei Zeilen in der Datei mit den hexadezimalen Werten 93, E7 und B8 beginnen, in dieser Reihenfolge. Die Reihenfolge dieser Zeilen wurde umgekehrt. Außerdem befinden sich die Zeilen „=SEQ“ jetzt unter jedem Satz von drei hexadezimalen Zeilen.

tac zur Rettung.

tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | less

Lass uns das aufschlüsseln.

Die -s (Trennzeichen) Option informiert tac was wir als Trennzeichen zwischen unseren Datensätzen verwenden möchten. Es sagt tac nicht das übliche Newline-Zeichen verwenden, sondern stattdessen unser Trennzeichen.

Die -r (regex) Option sagt tac um die Trennzeichenfolge als a . zu behandeln regulären Ausdruck.

Die -b (vor) Option Ursachen tac um das Trennzeichen vor jedem Datensatz statt danach aufzulisten (das ist die übliche Position des Standardtrennzeichens, des Zeilenumbruchzeichens).

Die -s (Trennzeichen) Zeichenfolge ^=SEQ.+[0-9]+*$ wird wie folgt entziffert:

Die ^ Zeichen steht für den Zeilenanfang. Es folgt =SEQ.+[0-9]+*$. Dies weist tac um nach jedem Vorkommen von „=SEQ.“ zu suchen. am Zeilenanfang, gefolgt von einer beliebigen Ziffernfolge (gekennzeichnet durch [0-9]), gefolgt von einem beliebigen anderen Zeichensatz (gekennzeichnet durch *$).

Wir pfeifen das Ganze hinein less, wie gewöhnlich.

umgekehrtes Logfile mit korrekt gebildeten Datensätzen

Unsere Datei wird jetzt in umgekehrter Reihenfolge präsentiert, wobei jede “=SEQ”-Labelzeile vor ihren drei Zeilen mit hexadezimalen Daten aufgeführt ist. Die drei Zeilen mit hexadezimalen Werten befinden sich innerhalb jedes Datensatzes in ihrer ursprünglichen Reihenfolge.


Wir können dies einfach überprüfen. Der erste Wert der ersten drei hexadezimalen Zeilen (das waren die letzten drei Zeilen, bevor die Datei umgekehrt wurde) stimmt mit den Werten überein, die wir zuvor aufgenommen haben: 93, E7 und B8, in dieser Reihenfolge.

Das ist ein ziemlicher Trick für einen Terminalfenster-Einzeiler.

Alles hat einen Zweck

In der Linux-Welt können selbst die scheinbar einfachsten Befehle und Dienstprogramme überraschende und leistungsstarke Eigenschaften haben.

Die Designphilosophie einfacher Utilities die machen eines gut, und die leicht mit anderen Dienstprogrammen zusammenarbeiten, hat zu einigen seltsamen kleinen Befehlen geführt, wie z tac. Auf den ersten Blick erscheint es ein bisschen seltsam. Aber wenn Sie unter die Oberfläche blicken, gibt es eine unerwartete Kraft, die Sie zu Ihrem Vorteil nutzen können.

Oder, wie eine andere Philosophie sagt: „Verachte die Schlange nicht, weil sie keine Hörner hat, denn wer sagt, dass sie kein Drache werden soll?“

Linux-Befehle
DateienTeer · pv · Katze · tac · chmod · grep · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · stat · ls · fstab · Echo · weniger · chgrp · chown · rev · aussehen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · srm
Prozessealias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · bei · Charge · kostenlos · welcher · dmesg · chfn · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · Jawohl · töten · Schlaf · sudo · es ist · Zeit · groupadd · Benutzermod · Gruppen · lshw · abschalten · neu starten · Halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzungnetstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · curl · wget · Wer · Wer bin ich · w · iptables · ssh-keygen · ufw

Beste Linux-Laptops für Entwickler und Enthusiasten

Related Posts