Como posso obter o comando tac no OS X?

59

Eu gosto de usar tacpara reverter a saída de cat. No entanto, não está disponível no terminal Mavericks. Tentei encontrá-lo no MacPorts e, novamente, não está disponível. Alguém por favor pode me mostrar como chegar tac? É muito útil para ler arquivos de log.

polarizar
fonte

Respostas:

66

Sim:

  • Instalar Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac aparentemente não é necessário com o Homebrew mais recente, veja o comentário de Ran Ever-Hadani abaixo

ou use o MacPorts para instalar de coreutilsmaneira semelhante.

Grebneke
fonte
Não entendo como ln -s /usr/local/bin/gtac /usr/local/bin/tacfuncionou ... Esse comando não deveria apenas listar alguns blocos de memória de arquivos?
Timothy Swan
1
O link simbólico é apenas por conveniência. O Homebrew instala binários coreutil em / usr / local / bin prefixando seu nome original com um 'g'. lstorna-se gls, headtorna ghead- se e assim por diante. Consequentemente, tacé instalado como gtace o link simbólico sugerido nesta resposta é apenas tacdisponibilizado com esse nome. Omitindo o link simbólico, você ainda pode executar o programa como gtac.
grebneke
Oh. Você está falando sobre ln -snão. ls -sIsso faz mais sentido agora. Devo ter entrado corretamente na primeira vez.
Timothy Swan
2
Além da resposta do grebneke : não é mais necessário o soft link. O sufixo g agora é adicionado apenas se o osx já tiver um comando com esse nome, portanto o tac é instalado como tac, não gtac.
Ran Ever-Hadani
70

No OS / X como em muitos sistemas (BSD, Solaris, AIX, IRIX ...), a funcionalidade do GNU tacestá disponível em tailcom a -r opção . Portanto, não há necessidade de instalar o GNU tac:

tail -r the-file
Stéphane Chazelas
fonte
11
Então, alias tac='tail -r'vai fazer o truque para OP!
Mkc 7/02
8
Bem, na verdade, o uso de um alias de shell pode falhar porque os aliases não são transferidos para scripts de shell. Use uma função comotac() { tail -r -- "$@"; }
kojiro 1/16
0

Instale o gnu coreutils já compilado com o Rudix :

sudo rudix install coreutils

Ou faça o download e instale o Rudix coreutils

dkmillares
fonte
0

Uma solução temporária pode ser:

alias tac='perl -e "print reverse(<>)"'
JJoao
fonte
1
Isso só me levou a aprender que <>não apenas lê do STDIN, mas opcionalmente do @ARGV. stackoverflow.com/questions/29020883/… Ainda não sei se reversecarregará o arquivo inteiro na memória antes de emitir as linhas na ordem inversa. Isso seria terrível.
Bruno Bronosky
@BrunoBronosky,> ... STDIN, mas opcionalmente a partir de @ ARGV: sim, é para isso que <> serve. > ... carregará o arquivo inteiro na memória ...: SIM, VAI! (evite fazer isso com arquivos de gigabyte)
JJoao 10/04