Wie kann ich den Befehl tac unter OS X erhalten?

59

Ich benutze gerne, um tacdie Ausgabe von umzukehren cat. Es ist jedoch im Mavericks-Terminal nicht verfügbar. Ich habe versucht, es auf MacPorts zu finden und wieder ist es nicht verfügbar. Kann mir bitte jemand zeigen, wie ich komme tac? Es ist sehr hilfreich zum Lesen von Protokolldateien.

polarisieren
quelle

Antworten:

65

Ja:

  • Installieren Sie Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac Bei Homebrew wird es anscheinend nicht benötigt, siehe Kommentar von Ran Ever-Hadani weiter unten

oder verwenden Sie MacPorts, um coreutilsauf ähnliche Weise zu installieren .

Grebneke
quelle
Ich verstehe nicht, wie ln -s /usr/local/bin/gtac /usr/local/bin/taces funktioniert ... Soll dieser Befehl nicht nur einige Dateispeicherblöcke auflisten?
Timothy Swan
1
Der Symlink dient nur der Übersichtlichkeit. Homebrew installiert die coreutil-Binärdateien in / usr / local / bin, indem dem ursprünglichen Namen ein 'g' vorangestellt wird. lswird gls, headwird gheadund so weiter. Folglich tacwird as installiert gtacund der in dieser Antwort vorgeschlagene Symlink soll nur tacunter diesem Namen verfügbar sein. Wenn Sie den Symlink weglassen, können Sie das Programm weiterhin als ausführen gtac.
Grebneke
Oh. Du redest ln -snicht ls -sDas macht jetzt mehr Sinn. Ich muss es beim ersten Mal richtig eingegeben haben.
Timothy Swan
2
Ergänzung zu Grebnekes Antwort: Den Softlink brauchen Sie nicht mehr. Das Suffix g wird jetzt nur hinzugefügt, wenn osx bereits einen Befehl mit diesem Namen hat, sodass tac als tac und nicht als gtac installiert wird.
Ran Ever-Hadani
69

Unter OS / X, wie auf vielen Systemen (BSDs, Solaris, AIX, IRIX ...), ist die Funktionalität von GNU mit der Optiontac verfügbar . GNU muss also nicht installiert werden :tail-rtac

tail -r the-file
Stéphane Chazelas
quelle
11
Also, alias tac='tail -r'mach den Trick für OP!
mkc
8
Tatsächlich kann die Verwendung eines Shell-Alias ​​fehlschlagen, da Aliase nicht in Shell-Skripte übertragen werden. Verwenden Sie eine Funktion wietac() { tail -r -- "$@"; }
Kojiro
0

Eine vorübergehende Lösung könnte sein:

alias tac='perl -e "print reverse(<>)"'
Joao
quelle
1
Dies hat mich nur dazu gebracht zu lernen, dass <>nicht nur von STDIN gelesen wird, sondern optional auch von @ARGV. Ich weiß immer noch nicht, ob die gesamte Datei in den Speicher geladen wird, bevor die Zeilen in umgekehrter Reihenfolge ausgegebenreverse werden. Das wäre schrecklich.
Bruno Bronosky
@BrunoBronosky,> ... STDIN, aber optional von @ ARGV: ja, dafür ist <> da. > ... lädt die gesamte Datei in den Speicher ...: JA, DAS WIRD ES! (Vermeiden Sie dies mit Gigabyte-Dateien)
Joao