¿Cómo puedo obtener el comando tac en OS X?


59

Me gusta usar tacpara invertir la salida de cat. Sin embargo, no está disponible en el terminal Mavericks. Traté de encontrarlo en MacPorts y nuevamente no está disponible. ¿Alguien puede mostrarme cómo llegar tac? Es muy útil para leer archivos de registro.

Respuestas:


66

Si:

  • Instalar Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac aparentemente no es necesario con el último Homebrew, vea el comentario de Ran Ever-Hadani a continuación

o use MacPorts para instalar coreutilsde manera similar.


No entiendo cómo lo ln -s /usr/local/bin/gtac /usr/local/bin/tachizo funcionar ... ¿No se supone que ese comando solo enumera algunos bloques de memoria de archivos?
Timothy Swan

1
El enlace simbólico es solo por conveniencia. Homebrew instala los binarios coreutil en / usr / local / bin con el prefijo de su nombre original con una 'g'. lsse convierte gls, headse convierte , gheadetc. En consecuencia, tacse instala como gtac, y el enlace simbólico sugerido en esta respuesta es solo ponerlo a tacdisposición con ese nombre. Omitiendo el enlace simbólico, aún puede ejecutar el programa como gtac.
grebneke

Oh. Estás hablando de ln -sno. ls -sEsto tiene más sentido ahora. Debo haberlo ingresado correctamente la primera vez.
Timothy Swan

2
Además de la respuesta de grebneke : ya no necesita el enlace suave. El sufijo g ahora solo se agrega si osx ya tiene un comando con ese nombre, por lo que tac se instala como tac, no como gtac.
Ran Ever-Hadani

70

En OS / X, como en muchos sistemas (BSD, Solaris, AIX, IRIX ...), la funcionalidad de GNU tacestá disponible tailcon la -r opción . Entonces no es necesario instalar GNU tac:

tail -r the-file

11
Por lo tanto, alias tac='tail -r'hará el truco para OP!
mkc

8
Bueno, en realidad el uso de un alias de shell puede fallar porque los alias no se transfieren a los scripts de shell. Utilice una función comotac() { tail -r -- "$@"; }
kojiro


0

Una solución temporal podría ser:

alias tac='perl -e "print reverse(<>)"'

1
Esto solo me hizo aprender que <>no solo lee de STDIN, sino opcionalmente de @ARGV. stackoverflow.com/questions/29020883/… Todavía no sé si reversecargará todo el archivo en la memoria antes de enviar las líneas en orden inverso. Eso sería terrible
Bruno Bronosky

@BrunoBronosky,> ... STDIN, pero opcionalmente de @ ARGV: sí, para eso está <>. > ... cargará todo el archivo en la memoria ...: ¡SÍ, LO HARÁ! (evite hacer esto con archivos gigabyte)
JJoao
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.