Wie die Linux-cat und tac-Befehle

0
801
Fatmawati Achmad Zaenuri/Shutterstock.com

Das Katz-und-tac-Befehle zeigen den Inhalt von text-Dateien, aber es gibt mehr als trifft das Auge. Tauchen Sie ein wenig tiefer und erfahren einige produktive Linux-Kommandozeilen-tricks.

Dies sind zwei einfache kleine Befehle, oft abgetan als genau das—zu einfach, um von wirklichem nutzen. Aber sobald Sie wissen, die verschiedenen Möglichkeiten, die Sie verwenden können, werden Sie sehen, dass Sie durchaus in der Lage zu tun, Ihren fairen Anteil an dem schweren heben, wenn es um das arbeiten mit Dateien.

Der cat-Befehl

cat dient der Untersuchung der Inhalte von text-Dateien, um sich Teile von Dateien zusammen zu einer größeren Datei.

In einem Zeit—zurück in die Zeit der dial-up-modem—Binär-Dateien wurden oft gebrochen, in mehrere kleinere Dateien um den Download zu erleichtern. Statt der Download einer großen Datei, Sie zog sich zurück, jede kleinere Datei. Wenn eine einzelne Datei nicht heruntergeladen korrekt, Sie würde einfach abrufen, die eine Datei wieder.

Natürlich, Sie brauchte dann ein Weg zum Wiederaufbau der Sammlung kleiner Dateien wieder in die einzelnen arbeiten binären Datei. Dieser Prozess wurde genannt verketten. Und das ist, wo die Katze kam und wo er seinen Namen bekommt.

Breitband-und Glasfaser-verbindungen verursacht haben, die Besondere Notwendigkeit zu verblassen, die—ähnlich wie screechy dial-ups klingt—also was bleibt für die Katze zu tun heute? Ziemlich viel eigentlich.

Die Anzeige einer Textdatei

Zu haben Katze-Liste den Inhalt einer text-Datei in einem terminal-Fenster den folgenden Befehl verwenden.

Stellen Sie sicher, dass die Datei eine Textdatei ist. Wenn Sie versuchen, um eine Liste der Inhalt einer binären Datei in das terminal-Fenster, werden die Ergebnisse unvorhersehbar. Sie könnten am Ende mit einem gesperrten terminal-Sitzung oder noch schlimmer.

Katze poem1.txt

Der Inhalt der Datei poem1.txt gezeigt werden im terminal-Fenster.

Das ist nur die Hälfte von dem berühmten Gedicht. Wo ist der rest? Es ‘s eine andere Datei, die hier genannt poem2.txt. Können wir machen, Katze-Liste den Inhalt mehrerer Dateien mit einem Befehl. Alles, was wir tun müssen, ist die Liste der Dateien, um auf der Kommandozeile.

Katze poem1.txt poem2.txt

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

Mit Katze weniger

Das Gedicht ist alles da, aber es schoss vorbei das Fenster zu schnell zu Lesen, die ersten paar Verse. Wir können leiten Sie die Ausgabe von cat in weniger, und scrollen Sie durch den text in unserem eigenen Tempo.

Katze poem1.txt poem2.txt | weniger

Wir können jetzt bewegen Sie sich vorwärts und rückwärts durch den text in einen stream, auch wenn es gehalten wird, in zwei getrennte text-Dateien.

Die Nummerierung der Zeilen in einer Datei

Wir können die Katze mit der Anzahl der Zeilen in der Datei angezeigt wird. Um dies zu tun, verwenden wir die Option-n (number) option.

Katze -n poem1.txt

Die Zeilen sind nummeriert, wie Sie angezeigt werden in das terminal-Fenster.

Nicht Anzahl Leerzeilen

Wir es geschafft, die Zeilen nummeriert Katze, aber die Leerzeilen zwischen den Strophen werden ebenso gezählt. Die Textzeilen nummeriert, aber das ignorieren von Leerzeilen verwenden Sie die Option-b (Nummer nichtleeren) option.

cat -b poem1.txt

Jetzt die text-Zeilen sind nummeriert, und die Leerstellen, Zeilen übersprungen werden.

Zeigen Sie nicht Mehrere Leere Zeilen

Wenn es Abschnitte von aufeinander folgenden Leerzeilen in einer Datei haben, können wir bitten, die Katze zu ignorieren, aber eine leere Zeile. Blick in diese Datei.

Das nächste Kommando wird verursachen, dass die Katze nur eine leere Zeile aus jeder Reihe von leeren Zeilen. Die option, die wir brauchen, um dies zu erreichen ist die Option-s (squeeze-blank) option.

Katze -s poem1.txt

Dies hat keinen Einfluss auf den Inhalt der Datei in keiner Weise; es ändert nur die Art und Weise cat zeigt den Inhalt der Datei.

Registerkarten Anzeigen

Wenn Sie wissen möchten, ob whitespace-Zeichen verursacht, die durch Leerzeichen oder tabs, können Sie herausfinden, mit die -T (show-tabs”) option.

cat -T poem1.txt

Die tabs sind dargestellt durch das Zeichen “^I”.

Anzeige die Enden der Linien

Sie können prüfen, ob Leerzeichen mit Hilfe der-E (show-enden) option.

cat -E poem1.txt

Die enden der Linien sind dargestellt durch das Zeichen”$”.

Verketten Von Dateien

Es macht keinen Sinn zu haben, ein Gedicht in zwei Dateien gespeichert, wobei die eine Hälfte in jedem. Lassen Sie uns nehmen Sie Sie zusammen und machen eine neue Datei mit dem gesamten Gedicht in ihm.

Katze poem1.txt poem2.txt > jabberwocky.txt

wir verwenden cat zu überprüfen, unsere neue Datei:

Katze jabberwocky.txt

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

Anfügen von Text an eine Vorhandene Datei

Das ist besser, aber Tatsache ist, dass es nicht das gesamte Gedicht. Der Letzte vers fehlt. Der Letzte vers in der Jabberwocky ist der gleiche wie der erste vers.

Wenn haben wir die erste Strophe in einer Datei, wir können hinzufügen, diese auf der Unterseite des jabberwocky.txt Datei, und wir haben das komplette Gedicht.

Im nächsten Befehl, wir haben zu verwenden > > nicht nur >. Wenn wir eine einzelne > wir werden überschreiben jabberwocky.txt. Wir wollen nicht, das zu tun. Wir möchten anfügen von text an der Unterseite.

Katze first_verse.txt >> jabberwocky.txt

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

Katze jabberwocky.txt

Und schließlich alle Teile des Gedichts zusammen.

Umleiten von stdin

Sie können umleiten von Eingabe von der Tastatur in eine Datei mit cat. Alles was Sie schreiben wird umgeleitet in die Datei, bis Sie auf Strg+D. Beachten Sie, dass, nutzen wir nur einen einzigen > weil wir wollen, um die Datei zu erstellen (oder überschreiben, falls vorhanden).

cat > my_poem.txt

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

Katze my-poem.txt

Die klingen wie eine Ferne turbine ist wohl Lewis Carroll im Grabe drehen bei hoher Geschwindigkeit.

Die tac-Befehl

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

Wir sehen, dass:

tac my_poem.txt

Und die Datei aufgeführt ist, um das terminal-Fenster in umgekehrter Reihenfolge. In diesem Fall hat es keine Auswirkungen auf seine literarischen Verdienste.

Mithilfe von tac Mit stdin

Mit tac ohne Dateinamen bewirkt, um den Betrieb auf die Eingabe von der Tastatur. Strg+D beenden Sie den input-phase, und tac wird die Liste in umgekehrter Reihenfolge, was würde Sie eingegeben haben.

tac

Wenn Sie Strg+D getroffen wird, wird die Eingabe rückgängig gemacht und aufgelistet, um das terminal-Fenster.

Mithilfe von tac Mit Log-Dateien

Abgesehen von low-grade parlor tricks, kann tac etwas nützliches machen? Ja, es kann. Viele log-Dateien Anhängen, Ihre neuesten Einträge am Ende der Datei. Mit tac (und, counterintuitively, Leiter) wir können pop die Letzte Eintragung in das terminal-Fenster.

Wir verwenden tac-Liste der syslog-Datei, in umgekehrter Richtung, und pipe es in den Kopf. Durch erzählen von Kopf zu drucken nur die erste Zeile erhält (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

Kopf druckt den aktuellen Eintrag aus der syslog-Datei, und wird dann beendet.

Beachten Sie, dass Kopf ist nur das drucken einer Zeile—, wie wir es uns gewünscht haben—aber die Linie ist so lang, er wickelt es zweimal um. Das ist, warum es sieht aus wie drei Zeilen der Ausgabe im terminal-Fenster.

Mithilfe von tac mit Text-Records

Der Letzte trick tac herauf seinen ärmel hat, ist eine Schönheit.

In der Regel, tac arbeitet auf text-Dateien durch die Arbeit seinen Weg durch Sie Zeile für Zeile, von unten nach oben. Eine Zeile ist eine Folge von Zeichen, abgeschlossen durch ein newline-Zeichen. Aber wir können sagen, tac arbeiten mit anderen Trennzeichen. Dies ermöglicht es uns, zu behandeln “Brocken” von Daten in die text-Datei als Datensätze.

Sagen wir, wir haben eine log-Datei aus irgendeinem Programm, die wir brauchen, zu prüfen oder zu analysieren. Lassen Sie uns einen Blick auf das format mit weniger.

weniger logfile.dat

Wie wir sehen können, es ist ein sich wiederholendes format für die Datei. Es sind Sequenzen von drei Linien der hexadezimale Werte. Jeder Satz von drei Linien von hexadezimalen hat ein label-Zeile, “=SEQ”, gefolgt von einer Folge von Ziffern.

Wenn wir einen Bildlauf zum Ende der Datei, können wir sehen, dass es eine Menge von diesen Aufzeichnungen. Der Letzte nummerierte 865.

Lassen Sie uns davon ausgehen, dass aus welchem Grund auch immer, wir müssen durch diese Datei in umgekehrter Reihenfolge, Datensatz indem Sie den Datensatz ein. Die Linie, um die drei hexadezimale Zeilen in jedem Datensatz muss erhalten bleiben.

Wir werden einen Vermerk machen, dass die letzten drei Zeilen in der Datei beginnen mit hexadezimal-Werte 93, E7 und B8, in dieser Reihenfolge.

Wir verwenden tac umkehren die Datei. Es ist eine sehr lange Datei, so werden wir Rohres in weniger.

tac logfile.dat | weniger

Das kehrt die Datei, aber es ist nicht das Ergebnis, das wir wollen. Wir möchten, dass die Datei rückgängig machen, aber die Zeilen die einzelnen Datensätze müssen in Ihrer ursprünglichen Reihenfolge.

Wir nahmen früher die letzten drei Zeilen in der Datei beginnen mit hexadezimal-Werte 93, E7 und B8, in dieser Reihenfolge. Die Reihenfolge der Zeilen Umgekehrt wurde. Auch das “=SEQ” Linien sind jetzt unter jedem Satz von drei hexadezimale Zeilen.

tac ist die Rettung.

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

Lassen Sie uns brechen, dass nach unten.

Die -s (separator) option informiert tac, was wir wollen, verwenden Sie als Trennzeichen zwischen unseren Aufzeichnungen. Es erzählt tac nicht seine übliche newline-Zeichen, aber die Nutzung unserer separator statt.

Die -r (regex) option sagt tac zur Behandlung der Trennzeichen als regulären Ausdruck.

Die-b – (vor) option bewirkt, dass die tac-Liste das Trennzeichen vor jedem Datensatz statt, nachdem es (das ist die übliche position seiner Standard-Trennzeichen, das neue-Zeile-Zeichen).

Die -s (separator) string ^=SEQ.+[0-9]+*$ ist, entschlüsselt sich wie folgt:

Das Zeichen ^ entspricht Anfang der Zeile. Dies ist gefolgt von =SEQ.+[0-9]+*$. Dies weist tac zu suchen, die für jedes vorkommen von “=SEQ.” am Beginn einer Zeile, gefolgt von einer beliebigen Folge von Ziffern (angegeben durch [0-9]), gefolgt von beliebigen anderen Zeichen (gekennzeichnet durch *$).

Wir sind Rohrleitungen, die ganze Menge in weniger, als üblich.

Unsere Datei ist nun in umgekehrter Reihenfolge mit jedem “=SEQ” label Zeile aufgelistet, bevor die drei Linien von hexadezimalen Daten. Die drei Linien der hexadezimale Werte werden in Ihrer ursprünglichen Reihenfolge innerhalb jedes Datensatzes.

Überprüfen können wir das einfach. Der erste Wert der ersten drei Zeilen hexadezimal (das waren die letzten drei Zeilen, bevor die Datei wurde rückgängig gemacht) entsprechen den Werten, die wir nahm eine Aufzeichnung von früher: 93, E7 und B8, in dieser Reihenfolge.

Das ist schon ein trick, um ein terminal-Fenster one-liner.

Alles Hat einen Sinn

In der Linux-Welt, auch die scheinbar einfachsten Befehle und Dienstprogramme können überraschende und kraftvolle Eigenschaften.

Die design-Philosophie von einfachen utilities, die eine Sache gut, und die leicht interwork mit anderen Dienstprogrammen, hat Anlass zu einigen seltsamen kleinen Befehle, wie tac. Auf den ersten Blick erscheint es etwas kurios. Aber wenn du schaust unter der Oberfläche, es ist eine unerwartete power, die Sie nutzen können, zu Ihrem Vorteil.

Oder, wie eine andere Philosophie, die sagt: “verachte nicht die Schlange für die keine Hörner, denn wer ist zu sagen, es darf nicht zu einem Drachen?”

LESEN SIE WEITER

  • › Wie Sie Sehen, Welche Anwendungen Sind Mit Ihrer Webcam auf Windows 10
  • › Future Tech: das, Was Wir am Meisten Begeistert
  • › Wie Smart Homes Zu Arbeiten?
  • › Was wird Passieren, um Ihr Huawei Ehre oder Telefon?
  • › Wird ein Smart Plug Für sich Selbst Bezahlen?