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.

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.


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

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

Uma solução temporária pode ser:

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.