
das cat
und tac
Befehle zeigen den Inhalt von Textdateien an, aber sie haben mehr zu bieten, als man auf den ersten Blick sieht. Tauchen Sie ein wenig tiefer ein und lernen Sie einige produktive Linux-Befehlszeilen-Tricks.
Dies sind zwei einfache kleine Befehle, die oft als solche abgetan werden: zu einfach um wirklich nützlich zu sein. Aber sobald Sie die verschiedenen Möglichkeiten kennen, können Sie sie verwenden, Sie werden sehen, dass sie erstaunlicherweise in der Lage sind, ihren gerechten Anteil an der Arbeit mit Dateien zu übernehmen..
Der Befehl der Katze
cat
wird verwendet für Durchsuchen Sie den Inhalt von Textdateienund Teile von Dateien zu einer größeren Datei zusammenfügen.
In einem Moment, im Zeitalter der Einwahl Modem: Die Binärdateien wurden zum einfachen Download oft in mehrere kleinere Dateien unterteilt. Anstatt eine große Datei herunterzuladen, zog jede kleinere Datei. Wenn eine einzelne Datei nicht richtig heruntergeladen wurde, Ich würde die Datei einfach zurückbekommen.
Natürlich, Also brauchte ich eine Möglichkeit, die Sammlung kleinerer Dateien in eine einzige funktionierende Binärdatei zu rekonstruieren. Dieses Verfahren wurde als Verkettung bezeichnet. Und das ist wo cat
kam rein und woher hat es seinen Namen?.
Breitband- und Glasfaserverbindungen haben dazu geführt, dass dieser besondere Bedarf schwindet, genau wie die kreischenden Geräusche von Telefonanrufen, Daher, Was bleibt für cat
heute zu tun? Eigentlich viel.
Anzeigen einer Textdatei
Haben cat
den Inhalt einer Textdatei in einem Terminalfenster auflisten, benutze den folgenden Befehl.
Stellen Sie sicher, dass die Datei eine Textdatei ist. Wenn Sie versuchen, den Inhalt einer Binärdatei im Terminalfenster aufzulisten, Ergebnisse werden unvorhersehbar sein. Sie können mit einer gesperrten Terminalsitzung oder Schlimmerem enden.
Katzengedicht1.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? Hier ist eine weitere Datei namens poet2.txt. Wir können cat
den Inhalt mehrerer Dateien mit einem Befehl auflisten. Alles, was wir tun werden, ist die Dateien der Reihe nach in der Befehlszeile aufzulisten.
Katze Gedicht1.txt Gedicht2.txt
Das sieht besser aus; Jetzt haben wir das komplette Gedicht.
Verwenden Sie Katze mit weniger
Das Gedicht ist alles da, Aber er ging zu schnell am Fenster vorbei, um die ersten paar Verse zu lesen. Wir können die Ausgabe von trichtern cat
innerhalb less
und scrollen Sie den Text in unserem eigenen Tempo nach unten.
Katze Gedicht1.txt Gedicht2.txt | weniger
Jetzt können wir den Text der Reihe nach durchgehen, auch wenn es sich in zwei separaten Textdateien befindet.
Zeilennummerierung in einer Datei
Wir können die Zeilen in der Datei so nummerieren, wie sie angezeigt wird. Um dies zu tun, wir nehmen das -n
Möglichkeit (Nummer).
Katze -n Gedicht1.txt
Die Zeilen werden so nummeriert, wie sie im Terminalfenster angezeigt werden.
Nummeriere die Leerzeilen nicht
Wir haben es geschafft, die Zeilen nummerieren zu lassen cat
, aber auch die Leerzeilen zwischen den Versen werden gezählt. Um die Textzeilen nummerieren zu lassen, aber die Leerzeilen zu ignorieren, benutze el -b
Möglichkeit (Nummer nicht leer).
Katze -b Gedicht1.txt
Jetzt werden Textzeilen nummeriert und Leerzeilen werden übersprungen.
Nicht mehrere leere Zeilen anzeigen
Wenn eine Datei Abschnitte mit aufeinanderfolgenden Leerzeilen enthält, wir können fragen cat
alle bis auf eine leere Zeile ignorieren. Schau dir diese Datei an.
Der folgende Befehl verursacht cat
um nur eine Leerzeile aus jeder Gruppe von Leerzeilen anzuzeigen. Die Option, die wir brauchen, um dies zu erreichen, ist die -s
(Leerstelle).
Katze -s Gedicht1.txt
Dies hat keinerlei Auswirkungen auf den Inhalt der Datei; ändere einfach die form cat
zeige die Datei.
Registerkarten anzeigen
Wenn Sie wissen möchten, ob Leerzeichen durch Leerzeichen oder Tabulatoren verursacht werden, das erfährst du mit -T
Möglichkeit (Show-Tabs).
Katze -T Gedicht1.txt
Die Registerkarten werden durch die Zeichen "^ I" dargestellt..
Anzeigen der Zeilenenden
Sie können nachfolgende Leerzeichen mit dem überprüfen -E
Möglichkeit (Show-Ends).
Katze -E Gedicht1.txt
Die Zeilenenden werden durch das Zeichen dargestellt “$”.
Dateien verketten
Es macht keinen Sinn, ein Gedicht in zwei Dateien zu speichern, mit jeweils der Hälfte. Lassen Sie uns sie verbinden und eine neue Datei mit dem vollständigen Gedicht erstellen.
Katze Gedicht1.txt Gedicht2.txt > jabberwocky.txt
lass uns verwenden cat
um unsere neue Datei zu überprüfen:
Katze jabberwocky.txt
Unsere neue Datei enthält den Inhalt der anderen beiden Dateien.
Text zu einer vorhandenen Datei hinzufügen
Das ist besser, aber in Wirklichkeit, es ist nicht das komplette gedicht. Der letzte Vers fehlt. Der letzte Vers von Jabberwocky ist der gleiche wie der erste Vers.
Wenn wir den ersten Vers in einer Datei haben, wir können es am Ende der jabberwocky.txt-Datei hinzufügen und wir haben das komplette Gedicht.
In diesem nächsten Befehl, Wir müssen verwenden >>
, Nicht nur >
. Wenn wir nur einen verwenden >
gut Überschreiben jabberwocky.txt. Das wollen wir nicht. Wir wollen befestigen Text am Ende.
Katze first_verse.txt >> jabberwocky.txt
Sehen wir uns den Inhalt der Datei jabberwocky.txt an:
Katze jabberwocky.txt
Und zum Abschluss, alle Teile des Gedichts sind zusammen.
Redirigir stdin
Sie können Tastatureingaben mit in eine Datei umleiten cat
. Alles, was Sie eingeben, wird in die Datei umgeleitet, bis Sie Strg . drücken + D. Bitte beachten Sie, dass wir nur einen verwenden >
weil wir die Datei erstellen wollen (oder überschreibe es, wenn es existiert).
Katze > mein_gedicht.txt
Wir können mit der Eingabe beginnen, sobald wir den Befehl eingeben. Wir drücken Strg + D wenn wir fertig sind. Später können wir den Inhalt der neuen Datei mit überprüfen:
Katze mein-gedicht.txt
Dieses Geräusch wie eine 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 der Dateien auf in umgekehrter Reihenfolge.
Lass uns das sehen:
tac my_poem.txt
Und die Datei wird im Terminalfenster in umgekehrter Reihenfolge angezeigt. Unter diesen Umständen, hat keinen Einfluss auf deine literarischen Verdienste.
Verwenden von tac mit stdin
Verwenden von tac
ohne Dateinamen funktioniert es bei Tastatureingaben. Drücken von Strg + D stoppt die Eingangsstufe, und tac listet in umgekehrter Reihenfolge auf, was Sie eingegeben haben.
tac
Wenn Strg gedrückt wird + D, die Eingabe wird rückgängig gemacht und im Terminalfenster angezeigt.
Verwenden von tac mit Protokolldateien
Abgesehen von den minderwertigen Salon-Gimmicks, können tac
etwas Nützliches tun? ja, kann es. Viele Protokolldateien fügen ihre neuesten Einträge am Ende der Datei hinzu. Verwenden von tac
(und, widersinnig, head
) wir können den letzten Eintrag im Terminalfenster anzeigen.
Wir gebrauchen tac
um die Syslog-Datei rückwärts aufzulisten und an weiterzuleiten head
. Zählen head
nur die erste empfangene Zeile drucken (das dank tac
ist die letzte Zeile der Datei), wir sehen den letzten Eintrag in der Syslog-Datei.
tac / var / log / syslog | Kopf -1
head
druckt den letzten Eintrag in der Syslog-Datei und wird dann beendet.
Beachten Sie, dass head
es wird nur eine Zeile gedruckt, wie wir verlangen, aber die schlange ist so lang, dass sie sich zweimal wickelt. Deshalb sehen sie im Terminalfenster wie drei Ausgabezeilen aus.
Verwenden Sie Tac mit Textaufzeichnungen
Der letzte Trick tac
er hat im Ärmel ist eine Schönheit.
Allgemein, tac
Arbeiten Sie mit Textdateien, indem Sie sie zeilenweise durcharbeiten, Prost. Eine Zeile ist eine Folge von Zeichen, die durch ein Zeilenumbruchzeichen abgeschlossen wird. Aber wir können sagen tac
mit anderen Trennzeichen arbeiten. Dadurch können wir behandeln “Fragmente” von Daten innerhalb der Textdatei als Datensätze.
Nehmen wir an, wir haben eine Protokolldatei eines Programms, die wir überprüfen oder analysieren müssen.. Werfen wir einen Blick auf das Format mit less
.
weniger logfile.dat
Wie wir sehen können, es gibt ein sich wiederholendes Format für die Datei. Es gibt dreizeilige Folgen von hexadezimal Werte. Jeder Satz von drei Hex-Zeilen hat eine Tag-Zeile, die mit "= SEQ" beginnt., gefolgt von einer Ziffernfolge.
Wenn wir zum Ende der Datei scrollen, Wir können sehen, dass es viele dieser Aufzeichnungen gibt. Der letzte hat die Nummer 865.
Nehmen wir an, aus irgendeinem Grund, wir müssen mit dieser Datei in umgekehrter Reihenfolge arbeiten, Datenprotokoll für Datenprotokoll. Die Reihenfolge der drei hexadezimalen Zeilen jedes Datensatzes muss eingehalten werden.
Beachten Sie, dass die letzten drei Zeilen der Datei mit den hexadezimalen Werten beginnen 93, E7 und B8, in dieser Reihenfolge.
Lass uns benutzen tac
um die Datei zu invertieren. Es ist eine sehr lange Datei, deshalb werden wir es kanalisieren less
.
tac logfile.dat | weniger
Das kehrt die Datei um, aber es ist nicht das ergebnis, das wir wollen. Wir möchten, dass die Datei rückgängig gemacht wird, aber die Zeilen jedes Datensatzes müssen in ihrer ursprünglichen Reihenfolge sein.
Wir haben zuvor aufgezeichnet, dass die letzten drei Zeilen der Datei mit den hexadezimalen Werten beginnen 93, E7 und B8, in dieser Reihenfolge. Die Reihenfolge dieser Zeilen wurde umgekehrt. Zur selben Zeit, Die Linien “= SEQ” jetzt sind sie es unter jeder Satz von drei Hexlinien.
tac
zur Rettung.
tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | weniger
Lass uns das analysieren.
das -s
Die Option (Separator) informiert tac
was wir als Trennzeichen zwischen unseren Datensätzen verwenden möchten. Würfel tac
Verwenden Sie nicht Ihr häufiges Newline-Zeichen, aber benutze stattdessen unser Trennzeichen.
das -r
(regex) Option sagt tac
die Trennkette als a . behandeln regulärer Satz.
das -b
(Vor) Option verursacht tac
um das Trennzeichen aufzulisten Vor jeder Datensatz statt danach (das ist die häufige Position Ihres Standardtrennzeichens, das Newline-Zeichen).
das -s
(Separator) Kette ^=SEQ.+[0-9]+*$
wird wie folgt entschlüsselt:
das ^
Zeichen steht für den Anfang der Zeile. Dies wird befolgt =SEQ.+[0-9]+*$
. Dies weist tac
um nach jedem Vorkommen von zu suchen “= SEQ”. am Anfang einer Zeile, gefolgt von einer beliebigen Ziffernfolge (angezeigt durch [0-9]
), und gefolgt von einem beliebigen anderen Zeichensatz (angezeigt durch *$
).
Wir kanalisieren alles in less
, wie immer.
Unsere Datei ist jetzt mit jeder Tag-Zeile in umgekehrter Reihenfolge angelegt “= SEQ” aufgeführt Vor Ihre drei hexadezimalen Datenzeilen. Die drei Zeilen mit hexadezimalen Werten stehen in ihrem Original Reihenfolge innerhalb jedes Datensatzes.
Wir können das einfach überprüfen. Der erste Wert der ersten drei Zeilen von hex (das waren die letzten drei Zeilen, bevor die Datei rückgängig gemacht wurde) stimmt mit den Werten überein, von denen wir einen vorherigen Datensatz genommen haben: 93, E7 und B8, in dieser Reihenfolge.
Das ist ein ziemlicher Hack für ein einzeiliges Terminalfenster.
Alles hat einen Zweck
In der Welt von Linux, Sogar die scheinbar einfachen Befehle und Dienstprogramme können überraschende und mächtige Eigenschaften haben..
Die Designphilosophie von Simple Utilities eine Sache machen sie gut, und die leicht mit anderen Dienstprogrammen interagieren, hat zu einigen seltsamen kleinen Befehlen geführt, Was tac
. Auf den ersten Blick, kommt mir etwas seltsam vor. Aber wenn du unter die Oberfläche schaust, es gibt eine unerwartete Macht, die du zu deinem Vorteil nutzen kannst.
Ö, wie eine andere philosophie sagt, “Verachte die Schlange nicht, weil sie keine Hörner hat, denn wer kann sagen, dass er sich nicht in einen Drachen verwandeln wird?”
setTimeout(Funktion(){
!Funktion(F,B,e,v,n,T,S)
{wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘335401813750447’);
fbq('Spur', 'Seitenansicht');
},3000);