Auch bekannt als reverse cat, tac ist ein einfaches Befehlszeilen-Dienstprogramm, mit dem Sie Zeilen in der Ausgabe mit dem Befehl | . umkehren können eingebauter Pfeifenoperator und Tac. Das heißt, wenn Sie einen Befehl auf der linken Seite (lhs) haben und den Inhalt seiner Ausgabe umkehren möchten, müssen Sie nur lhs | . eingeben tac. Das ist es!
Zugegeben, es gibt mehr zu takten, als man auf den ersten Blick sieht. Mach dir keine Sorgen. Wir decken alles rechtzeitig ab.
Tipps zur Taktik
Nutzen oder nicht nutzen, das ist hier die Frage. Du wirst nicht, du willst nicht tac, wenn du nicht musst. Wenn Sie jedoch Tac als Ihren Brot-und-Butter-Befehl verbreiten möchten, liegt das an Ihnen. In der Zwischenzeit ist hier mein Ratschlag, beide Seiten zu taktieren, um neutral zu bleiben.
Wann sollte man tac . verwenden?
Es gibt Zeiten, in denen Sie tac verwenden können, um mehr aus der Befehlszeile herauszuholen, mit weniger Code und weniger Zeit für die Suche nach lhs-Befehlsoptionen.
Wenn Sie sich über die Optionen von lhs . nicht sicher sind
Viele Befehle wie sort haben eine Option, um die Ausgabe eines Befehls umzukehren. Wenn Sie sich jedoch nicht sicher sind, ob ein Befehl auf der linken Seite eine Option -r zum Umkehren der Ausgabe hat oder nicht, ist die Verwendung von tac eine sichere Möglichkeit, die Ausgabezeilen umzukehren.
Wenn Leistung keine Rolle spielt
Obwohl unbedeutend, funktionieren die meisten Befehle, die in Verbindung mit einer integrierten Option zum Umkehren der Ausgabe verwendet werden, besser als die Ausgabe an tac . weiterzuleiten. Wenn also eine kleine Leistungsverzögerung kein Problem ist, ist es in Ordnung, die Ausgabe in den Tac zu leiten, um die Ausgabe umgekehrt wiederzugeben.
Wann sollte man Tac nicht verwenden?
Es gibt Zeiten, in denen Sie Tac möglicherweise nicht verwenden, weil Sie es besser wissen. Hier sind ein paar zu beachten.
Wenn Sie wissen, dass der Befehl auf der linken Seite eine Option zum Umkehren von Ausgabezeilen hat
Wie ich schon sagte: „Die meisten Befehle verfügen über eine Option zum Umkehren der Ausgabe.” Wenn Sie wissen, dass ein bestimmter lhs-Befehl eine Option hat, dürfen Sie tac nicht verwenden. Schließlich ist -r kürzer als - | tac.
Wenn Leistung zählt
Wie ich schon sagte: „Die Verwendung der linken Reverse-Option kann eine bessere Leistung erbringen als tac.” Wenn Sie ein paar Sekunden in einem Bash-Skript herausquetschen möchten oder mit größeren Dateien zu tun haben, deren Lesen Zeit benötigt, können Sie tac nicht verwenden.
Tac-Hilfe
Das Ausführen des Befehls help für tac oder man tac zeigt die Verwendung zusammen mit den Optionen, die verwendet werden können. Hier ist, was Sie erwartet.
Befehle
tac --helpAusgabe
Tac-Version
Welche Version bin ich??
Du bist die neueste Version von dir. Für die Version Ihres Tacs gibt es jedoch eine Option dafür.
Befehle
tac --versionAusgabe
Anmerkungen
Wenn Sie tac unter FreeBSD oder macOS verwenden, ist die lange Option für die Version möglicherweise nicht verfügbar. Versuchen Sie in diesem Fall -v oder man tac. Wenn du es probiert hast, lass es mich wissen. Ich bin neugierig. Vielen Dank
Tac-Optionen
Neben Hilfe und Version hat tac nicht viele Optionen. Für das, was es hat, werden Sie sicher feststellen, dass Tac nicht nur eine alte umgekehrte Katze ist.
Tac vor Option
Mit der Option -b können Sie ändern, wie das Trennzeichen in der Ausgabe angehängt wird. Standardmäßig wird das Newline-Trennzeichen nach jeder Zeile angehängt.
Ich weiß, es ist verwirrend. Lass es uns anhand eines Beispiels aufschlüsseln.
Sehen wir uns zuerst an, wie unsere Ausgabe aussieht, bevor wir tac -b . verwenden.
Befehle
sequenz 10Ausgabe
Sehen wir uns nun an, was unsere Ausgabe nach der Verwendung von tac ohne -b . wird.
Befehle
seq 10 | tacAusgabe
Sehen wir uns nun an, was die Ausgabe mit tac -b . wird.
Befehle
seq 10 | tac -bAusgabe
Tac-Trennzeichen-Option
Mit der Trennoption -s 'literal string' können Sie das Zeichen oder die Zeichenfolge angeben, die von tac verwendet werden, um Zeilen zu unterscheiden. Standardmäßig wird das Newline-Zeichen ('0a' in Hex) verwendet.
Wie man die Tac-Trennungsoption verwendet, ist zunächst nicht offensichtlich obvious. Sobald Sie jedoch wissen, dass es da ist, ist es schwer, es nicht zu verwenden.
Betrachten Sie das folgende Beispiel, das auf Linien arbeitet, die in hex dargestellt sind.
Befehle
Folge 20 | xxd -ps | tac -s '0a' | xxd -ps -rAusgabe
Anmerkungen
(1) Es mag trivial erscheinen, wenn man die seq 20 | tac-Befehl, in diesem Fall haben wir jedoch keine Zeit damit verbracht, am Ausgabestream in Hex zu arbeiten. Die Verwendung dieses Musters ist nützlich, wenn das Trennen nicht so trivial ist wie das neue Zeilenzeichen wie das nullte Byte.
Versuchen Sie jetzt weniger, Tac für etwas weniger Rohes und mehr Meta wie einfaches HTML zu verwenden.
Betrachten Sie die folgende Datei.
Datei
EINB
C
Befehle
file () echo -e " AB
C
" ;
Datei | tac-s"
"
Ausgabe
Wir haben es geschafft, die HTML-Seite zu konvertieren
EINB
C
in
CB
EIN
mit tac.
Angenommen, Sie müssen etwas Komplizierteres tun, z. B. ein beliebiges Tag als Tac-Trennzeichen behandeln. In diesem Fall kommen Sie nicht davon, nur die Trennoption allein zu verwenden. Hier kommt die Regex-Option ins Spiel. In Kombination mit der Separatoroption können Sie mit dem tac-Befehl mehr tun, als eine Zeile in einer Datei umzukehren. Hier ist wie.
Tac-Regex-Option
Mit der Regex-Option -r -s 'regex' können Sie festlegen, dass die Trennzeichenfolge als regulärer Ausdruck behandelt werden soll.
Die Verwendung der Option tac regex ist so einfach wie das Hinzufügen der Option -r vor oder nach dem Trennzeichen.
Betrachten Sie das vorherige Beispiel mit der Option regex in Verbindung mit der Option separator. Lassen Sie uns von Tac jedes Markup-Tag als Trennzeichen behandeln.
Datei
einfache Funktionen
Funktionen sind in bash einfach. Zumindest dieser ist. Es legt eine Zeichenfolge auf den Bildschirm.
Befehle
einfache-funktion
()
Echo
so einfach wie es geht einfache-funktion
Quelle: https://temptemp3.github.io/bash-Funktionen
Befehle
Datei ()Echo'
einfache Funktionen
Funktionen sind in bash einfach. Zumindest dieser ist. Es stellt ein
Zeichenfolge auf dem Bildschirm.
Befehle
einfache-funktion
()
Echo so einfach wie es geht
einfache-funktion
Datei | tac -r -s "]*."
Ausgabe
Wir haben es geschafft, die HTML-Seite zu konvertieren, indem wir die Datei mithilfe von HTML-Tags umkehren. Wenn man sich die Details anschaut, wird man feststellen, dass es noch nicht perfekt ist.
Tac-Befehl in reiner Bash
Hier ist eine primitive Version von Tac-Implement in reiner Bash, die die von einem lhs-Befehl eingegebenen Zeilen umkehrt. Zukünftige Versionen bleiben als Übung übrig.
#!/bin/bash## tac
##-Version 0.0.1 - Initiale
##################################################
tac()
local -a arr
local -i i
Kartendatei arr -
i="$#arr[@]"
während [ $i -ge 0 ]
tun
echo $arr[i]
lass i-=1
getan
################################################
tac
################################################
Quelle: https://github.com/temptemp3/ba.sh/blob/master/tac.Sch
Tac-Befehl mit anderen Befehlen
Hier sind einige primitive Versionen von tac implementieren, die andere Befehle verwenden, die die von einem lhs-Befehl eingegebenen Zeilen umkehren. Zukünftige Versionen bleiben als Übung übrig.
Bevor wir beginnen, schließen Sie die Augen und denken Sie: „Was könnte verwendet werden, um eine primitive Version von Tac zu implementieren??”
Viele Befehle fallen mir ein, aber ich werde mich auf diejenigen konzentrieren, für die wir Platz haben.
gaffen
Ähnlich wie beim Tac-Befehl im reinen Bash-Beispiel würden wir zur Implementierung von Tac zuerst die gelesenen Zeilen speichern, die rückwärts wiedergegeben werden sollen, nachdem alle Zeilen gelesen wurden. So würde es mit Gawk aussehen.
gawk ' line[++line[0]]=$(0) END for(i=0;i
Versuchen Sie es nun mit dem lhs-Befehl seq 10.
seq 10 | gawk ' line[++line[0]]=$(0) END for(i=0;i
Wie zu erwarten ist die Ausgabe
Übungen
1. Die Funktion lhs() seq 10; listet die ganzen Zahlen 1 bis 10 auf. Schreiben Sie einen rhs-Befehl, so dass lhs | rhs entspricht 10864213579 nur mit tac (Hinweis: siehe Tac vor Optionsbeispiel)
2. Kehren Sie die Ausgabe von rhs() um find -mindepth 1 -maxdepth 1 -print0 ; mit tac (Hinweis: siehe Beispiel für Tac-Trennzeichenoption)
3. Takt verlängern.sh (im Tac-Befehl in reiner bash), um sich genau wie tac . zu verhalten. Sie müssen Optionen hinzufügen und deren Verhalten testen.
4. Implementieren Sie eine primitive Version von tac in reiner bash als rekursive Funktion.
TL;DR
Auch hier hat es mir Spaß gemacht, den Bash-Tac-Befehl zu schreiben. Nach dem Lesen hoffe ich, dass Sie zustimmen können, dass es mehr zu takten gibt, als Sie dachten. Außerdem hoffe ich, dass Sie wissen, wie nützlich der Befehl tac sein könnte, nachdem Sie versucht haben, die Dinge auf die harte Tour zu machen. Wenn es jemand schafft, eine der Übungen zu absolvieren oder Hilfe bei den Hausaufgaben braucht, lass es mich wissen. Vielen Dank,