So verwenden Sie die Linux-Befehle cat und tac

Die Befehle cat und tac 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

Katze ist es gewohnt 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 hier kam die Katze ins Spiel und erhielt ihren Namen.

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

Anzeigen einer Textdatei

Verwenden Sie den folgenden Befehl, damit cat den Inhalt einer Textdatei in einem Terminalfenster auflistet.

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 cat den Inhalt mehrerer Dateien mit einem Befehl auflisten lassen. 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 cat in less umleiten und in unserem eigenen Tempo durch den Text scrollen.

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 Option -n (Zahl).

cat -n poem1.txt

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

Keine Leerzeilen nummerieren

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

cat -b poem1.txt

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

  So verwenden Sie den Befehl chgrp unter Linux

Nicht mehrere Leerzeilen anzeigen

Wenn eine Datei Abschnitte mit aufeinander folgenden Leerzeilen enthält, können wir cat bitten, alle bis auf eine Leerzeile zu ignorieren. Sehen Sie sich diese Datei an.

Der nächste Befehl bewirkt, dass cat nur eine Leerzeile aus jedem Leerzeilenbündel anzeigt. Die Option, die wir dazu benötigen, ist die Option -s (squeeze-blank).

cat -s poem1.txt

Dies hat keinerlei Auswirkungen auf den Inhalt der Datei; es ändert nur die Art und Weise, wie cat die Datei anzeigt.

Registerkarten anzeigen

Wenn Sie wissen möchten, ob Leerzeichen durch Leerzeichen oder Tabulatoren verursacht werden, können Sie dies mit der Option -T (show-tabs) herausfinden.

cat -T poem1.txt

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

Anzeigen der Zeilenenden

Sie können mit der Option -E (show-ends) nach nachgestellten Leerzeichen suchen.

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

cat Gedicht1.txt Gedicht2.txt > jabberwocky.txt in einem Terminalfenster“ width=“646″ height=“57″ onload=“pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Verwenden wir cat, um unsere neue Datei zu überprüfen:</p>
<pre>cat jabberwocky.txt</pre > <p><img loading=

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 jabberwocky.txt-Datei hinzufügen, und wir haben das vollständige Gedicht.

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

cat first_verse.txt >> jabberwocky.txt

cat first_verse.txt >> jabberwocky.txt in einem Terminalfenster“ width=“646″ height=“57″ onload=“pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Überprüfen wir den Inhalt der Datei jabberwocky.txt:</p>
<pre>cat jabberwocky.txt< /pre> <p><img loading=

Und schließlich sind alle Teile des Gedichts zusammen.

Umleitung von stdin

Mit cat können Sie Eingaben von der Tastatur in eine Datei umleiten. 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 sie überschreiben möchten, falls sie existiert).

cat > my_poem.txt

cat > my_poem.txt in einem Terminalfenster“ width=“646″ height=“57″ onload=“pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);“  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>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:</p>
<pre>cat my-poem.txt</pre>
<p><img loading=

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 ähnelt cat, listet jedoch 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

Die Verwendung 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

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

Wir verwenden tac, um die Syslog-Datei in umgekehrter Reihenfolge aufzulisten und sie in den Kopf zu leiten. Indem wir head anweisen, nur die erste empfangene Zeile zu drucken (die dank tac die letzte Zeile in der Datei ist), 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 nur eine Zeile druckt – 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, den Tac im Ärmel hat, ist eine Schönheit.

Normalerweise arbeitet tac mit Textdateien, indem es 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 tac anweisen, 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 weniger an.

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.

Lassen Sie uns Tac verwenden, um die Datei umzukehren. Es ist eine sehr lange Datei, daher werden wir sie in weniger umleiten.

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 Hexadezimalwerten 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 Option -s (Trennzeichen) informiert tac darüber, was wir als Trennzeichen zwischen unseren Datensätzen verwenden möchten. Es weist tac an, nicht das übliche Newline-Zeichen zu verwenden, sondern stattdessen unser Trennzeichen.

Die Option -r (regex) weist tac an, die Trennzeichenfolge als a . zu behandeln regulären Ausdruck.

Die Option -b (before) bewirkt, dass tac das Trennzeichen vor jedem Datensatz auflistet und nicht danach (das ist die übliche Position seines Standardtrennzeichens, des Zeilenumbruchzeichens).

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

Das Zeichen ^ steht für den Zeilenanfang. Darauf folgt =SEQ.+[0-9]+*$. Dadurch wird tac angewiesen, nach jedem Vorkommen von „=SEQ“ zu suchen. am Zeilenanfang, gefolgt von einer beliebigen Ziffernfolge (gekennzeichnet durch [0-9]) und gefolgt von einem beliebigen anderen Zeichensatz (gekennzeichnet durch *$).

Wir stecken das Ganze wie üblich in weniger.

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. B. 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?“