Comment puis-je obtenir la commande tac sur OS X?

59

J'aime utiliser tacpour inverser la sortie de cat. Cependant, il n'est pas disponible dans le terminal Mavericks. J'ai essayé de le trouver sur MacPorts et encore une fois, ce n'est pas disponible. Quelqu'un peut-il s'il vous plaît me montrer comment obtenir tac? C'est très utile pour lire les fichiers de log.

polariser
la source

Réponses:

66

Oui:

  • Installer Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac apparemment pas nécessaire avec le dernier Homebrew, voir le commentaire de Ran Ever-Hadani ci-dessous

ou utilisez MacPorts pour installer coreutilsde la même manière.

Grebneke
la source
Je ne comprends pas comment ln -s /usr/local/bin/gtac /usr/local/bin/taccela a fonctionné ... Cette commande n'est-elle pas uniquement censée répertorier des blocs de mémoire de fichier?
Timothy Swan
1
Le lien symbolique est juste pour plus de commodité. Homebrew installe les fichiers binaires coreutil dans / usr / local / bin en préfixant leur nom d'origine par un «g». lsdevient gls, headdevient gheadet ainsi de suite. Par conséquent, tacest installé en tant que gtac, et le lien symbolique suggéré dans cette réponse est juste pour le rendre tacdisponible sous ce nom. En omettant le lien symbolique, vous pouvez toujours exécuter le programme en tant que gtac.
grebneke
Oh. Vous parlez de ln -spas ls -sCela a plus de sens maintenant. Je dois l'avoir entré correctement la première fois.
Timothy Swan
2
Ajout à la réponse de grebneke : plus besoin du lien logiciel. Le suffixe g n'est maintenant ajouté que si osx a déjà une commande portant ce nom. Tac est donc installé en tant que tac, pas gtac.
Ran Ever-Hadani
70

Sur OS / X comme sur de nombreux systèmes (BSD, Solaris, AIX, IRIX ...), les fonctionnalités de GNU tacsont disponibles tailavec l' -r option . Donc, pas besoin d'installer GNU tac:

tail -r the-file
Stéphane Chazelas
la source
11
Alors, alias tac='tail -r'va faire le tour pour OP!
mkc
8
En fait, l’ utilisation d’un alias de shell peut échouer car les alias ne sont pas transférés dans des scripts de shell. Utilisez une fonction commetac() { tail -r -- "$@"; }
kojiro
0

Installez gnu coreutils déjà compilé avec Rudix :

sudo rudix install coreutils

Ou téléchargez et installez Rudix Coreutils

dkmillares
la source
0

Une solution temporaire pourrait être:

alias tac='perl -e "print reverse(<>)"'
JJoao
la source
1
Cela vient de me faire apprendre que <>non seulement lire à partir de STDIN, mais éventuellement à partir de @ARGV. stackoverflow.com/questions/29020883/… Je ne sais toujours pas si reversele fichier entier sera chargé dans la mémoire avant la sortie des lignes dans l'ordre inverse. Ce serait terrible.
Bruno Bronosky
@BrunoBronosky,> ... STDIN, mais facultativement de @ ARGV: oui, c'est à quoi <> est destiné. > ... chargera l'intégralité du fichier en mémoire ...: (évitez de faire cela avec des fichiers gigaoctets)
JJoao