GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erste Schritte mit dem Linux-tac-Befehl

Der tac Befehl ist im Wesentlichen die Katze Befehl, aber sein Zweck ist es, Dateien in umgekehrter Reihenfolge zu verketten. Wie Katze , hat es einen praktischen Fallback-Modus, um auf Standardausgabe zu drucken (STDOUT), wenn keine Ausgabedatei bereitgestellt wird, was es zu einem der Befehle macht, die häufiger als fauler Pager verwendet werden – wie less und mehr – als die Funktion, nach der sie benannt ist.

Die Katze command wird oft überstrapaziert und missbraucht, und tac wird oft als Scherzbefehl wie ddate verstanden oder Cowsay . Es wird oft in Artikeln zum Aprilscherz vorgeführt, in denen dumme Terminaltricks beschrieben werden. Daher mag es überraschen, dass tac tatsächlich einen legitimen Daseinsgrund hat.

Es ist eigentlich ein nützlicher Befehl.

Was ist der Zweck von tac?

Der Takt Manpage ist ziemlich schlecht darin, ihre eigene Funktion zu beschreiben:

Write each FILE to standard output, last line first. 

Nehmen Sie diese Aussage so, wie sie geschrieben ist, tac die letzte Zeile einer Datei drucken soll, dann die Datei ab Zeile eins drucken:

$ cat metasyntactic.list
foobar
foo
bar
baz

$ tac metasyntactic.list
baz
foobar
foo
bar

Das tut es aber nicht. Seine Infoseite ist viel übersichtlicher:


kopiert jede DATEI ('-' bedeutet Standardeingabe),
oder Standardeingabe, wenn keine angegeben ist,
zur Standardausgabe, wobei die Datensätze
(standardmäßig Zeilen) in jeder separat umgedreht werden .

Zum Beispiel:

$ tac metasyntactic.list
baz
bar
foo
foobar

Ignoriert die Tatsache, dass tac gibt Ihnen alles umgekehrt, es hat ein paar überraschend nützliche und einzigartige Optionen.

Tac und Trennzeichen

Wie die Infoseite zeigt, muss die Datei nicht durch eine Zeile getrennt werden, was bedeutet, dass tac ist ebenso effektiv mit beispielsweise einer CSV-Datei. Mit dem --separator definieren Sie das Trennzeichen einer Datei oder -s Option, zusammen mit dem in der Datei verwendeten Trennzeichen.

Bei einer CSV-Datei ist das Zeichen wahrscheinlich ein Komma (, ), aber Sie können jedes beliebige Zeichen definieren. Wenn eine Datei jedoch nicht mit dem Trennzeichen endet, erhalten Sie ein unerwartetes Ergebnis:

$ tac --separator="," metasyntactic.csv
bazbar,foo,foobar

Zwischen den ersten beiden Einträgen steht kein Trennzeichen. Auf den letzten Datensatz der Datei (die Zeichenfolge nach dem letzten Trennzeichen, in diesem Fall ein Komma) selbst folgt kein Komma, sodass er von tac als Nicht-Datensatz behandelt wird . Um dieses Problem zu berücksichtigen, verwenden Sie --before oder -b Option, die das Trennzeichen vor jeden Datensatz setzt:

$ tac --separator="," --before metasyntactic.csv
baz,bar,foo,foobar

Das Trennzeichen muss kein einzelnes Zeichen sein. Es kann auch ein regulärer Ausdruck (regex) sein.

Tac und reguläre Ausdrücke

Eine vollständige Erklärung von Regex geht über den Rahmen dieses Artikels hinaus, aber es ist erwähnenswert, dass erweitertes POSIX durch eine Umgebungsvariable unterstützt wird. Erweiterte Regex verbessert die Lesbarkeit eines regulären Ausdrucks erheblich, und der Einfachheit halber wird dies in diesem Beispiel verwendet. Angenommen, Sie haben eine Datei, die Strings enthält, die alle durch Ganzzahlen getrennt sind:

$ cat metasyntactic.txt
foobar123foo456bar789baz898

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Sie können zuverlässig vorhersagen, dass die Zeichenfolgen, die Ihnen wichtig sind, durch ganze Zahlen getrennt sind, aber Sie können nicht zuverlässig vorhersagen, wie diese ganzen Zahlen aussehen werden. Das ist genau das Problem, das Regex lösen soll.

So verwenden Sie Regex in Ihrem Tac verwenden Sie den Befehl --regex oder -r Option vor Ihrem --separator Definition. Außerdem müssen Sie REG_EXTENDED aktivieren, es sei denn, es ist bereits in Ihrer Umgebung festgelegt Umgebungsvariable. Sie können diese Variable auf alles andere als Null setzen, um sie zu aktivieren, und zwar auf die übliche Weise:

  • Exportieren Sie die Variable für die Shell-Sitzung, die Sie verwenden.
  • Setzen Sie die Umgebungsvariable in Ihrer Shell-Konfigurationsdatei (z. B. ~/.bashrc ).
  • Stellen Sie die Umgebungsvariable dem tac voran Befehl (in Bash, Zsh und ähnlichem), wie im folgenden Beispiel gezeigt:
$ REG_EXTENDED=1 tac --regex \
--separator='[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1

Die Regex-Option verarbeitet nicht abgeschlossene Datensätze jedoch nicht gut, selbst wenn sie --before verwendet Möglichkeit. Möglicherweise müssen Sie Ihre Quelldatei anpassen, wenn Ihnen diese Funktion wichtig ist.

Wann man tac verwendet

Diese einfachen, aber nützlichen Parsing-Optionen machen tac lohnt sich als unkomplizierter, minimalistischer Parsing-Befehl. Für diese einfachen Jobs, für die es sich nicht lohnt, einen AWK- oder Perl-Ausdruck zu schreiben, tac könnte nur eine vernünftige Lösung sein.

Der Takt Der Befehl ist offensichtlich begrenzt, da er Datensätze in keiner Weise manipuliert, außer sie umzukehren. Aber manchmal ist das die einzige Listenmanipulation, die Sie brauchen.

Wenn Sie beispielsweise Software für die Verteilung paketieren, ist es nicht ungewöhnlich, eine Liste mit Abhängigkeiten zu haben, die für die Installation erforderlich sind. Je nachdem, wie Sie diese Liste erstellt haben, haben Sie sie möglicherweise in der Reihenfolge, in der Sie festgelegt haben, dass die Abhängigkeiten erforderlich sind, anstatt in der Reihenfolge, in der sie installiert werden müssen.

Diese Vorgehensweise ist relativ häufig, da Compilerfehler zuerst die Abhängigkeiten auf hoher Ebene treffen. Das heißt, wenn Ihrem System libavcodec fehlt dann stoppt GCC und warnt Sie; aber da GCC keine Gelegenheit hatte, Ihr System auf libvorbis zu untersuchen und libvpx , kann es Ihnen beispielsweise nicht mitteilen, dass diese Abhängigkeiten ebenfalls fehlen (und häufig auf Ihrem System vorhanden sein müssen, bevor libavcodec kompiliert wird ).

Ihre Liste der Abhängigkeiten wächst also von oben nach unten, wenn Sie herausfinden, welche Bibliotheken Ihr System benötigt, um die Bibliotheken zu erstellen, die die Bibliotheken benötigen (und so weiter). Am Ende eines solchen Prozesses tac ist die schnelle und einfache Möglichkeit, diese Liste umzukehren.

Ein weiteres häufiges Ärgernis sind Protokolldateien. Einträge werden im Allgemeinen an eine Protokolldatei angehängt, daher verwenden Administratoren tail um die neuesten Fehler anzuzeigen. Das funktioniert gut, aber manchmal möchten Sie einen "Bruch" von Einträgen sehen, ohne zu wissen, wie weit Sie zurückgehen müssen. Der Takt Befehl an weniger geleitet oder mehr bringt die neuesten Einträge oben auf Ihrem Bildschirm.

Schließlich haben viele Konfigurationsdateien keine eindeutige Endmarkierung für einen bestimmten Abschnitt. Sie können awk nachschlagen und sed Befehle, um einen Weg zu finden, um festzustellen, wann ein Block in einer Konfigurationsdatei endet, oder Sie können tac verwenden um die Reihenfolge umzukehren, sodass Ihr Parser, sobald er den ersten relevanten Eintrag in diesem Block gefunden hat, auch weiß, wann er aufhören muss Lesen, denn was früher die Kopfzeile war, ist jetzt eine Fußzeile.

Tac an

tac hat noch viele andere großartige Verwendungsmöglichkeiten , und wahrscheinlich eine Reihe von Gründen, die tac ist zu rudimentär, um eine Lösung zu sein. Auf Ihrem System ist es jedoch wahrscheinlich installiert. Denken Sie also an diesen Befehl, wenn Sie das nächste Mal diesen Grenzfall in Ihrem Arbeitsablauf finden, der wirklich angegriffen werden muss umgekehrt.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Überprüfen Sie den Dateistatus unter Linux mit dem Befehl stat

  3. Sortierbefehl in Linux mit Beispielen

  4. Erste Schritte mit PostgreSQL unter Linux

  5. Erste Schritte mit SSH unter Linux

Erste Schritte mit dem Linux-Betriebssystem

Linux-WC-Befehl mit Beispielen

Erste Schritte mit dem Tar-Befehl

Verwendung des Linux-mv-Befehls mit Beispielen

Sichern Sie Linux mit der Sudoers-Datei

Linux-Mount-Befehl mit Beispielen