68

I like to use tac to reverse the output of cat. However, it's not available in the Mavericks terminal. I tried to find it on MacPorts and again it's not available. Can anyone please show me how to get tac? It's very helpful for reading log files.

83

On OS/X like on many systems (BSDs, Solaris, AIX, IRIX...), the functionality of GNU tac is available in tail with the -r option. So no need to install GNU tac:

tail -r the-file
4
  • 13
    So, alias tac='tail -r' will do the trick for OP!
    – mkc
    Feb 7 '14 at 17:18
  • 12
    Well, actually using a shell alias may fail because aliases don't transfer into shell scripts. Use a function like tac() { tail -r -- "$@"; }
    – kojiro
    Mar 1 '16 at 17:44
  • Does it have options like -rs which will let you reverse at char level instead of new lines?
    – C--
    Nov 7 '19 at 20:00
  • @SubinSebastian, I've updated the link to the man page which Apple no longer makes available. But in short, no BSD tail has no equivalent of GNU tac's -s option. Nov 7 '19 at 21:45
73

Yes:

  • Install Homebrew
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac apparently not needed with latest Homebrew, see comment by Ran Ever-Hadani below

or use MacPorts to install coreutils in a similar way.

1
  • 2
    Addition to grebneke's answer: no need the soft link anymore. The g suffix is now only added if osx already has a command with that name, so tac is installed as tac, not gtac. Feb 17 '19 at 21:34
1

One temporary solution could be:

alias tac='perl -e "print reverse(<>)"'
2
  • 1
    This just caused me to learn that <> doesn't only read from STDIN, but optionally from @ARGV. stackoverflow.com/questions/29020883/… I still don't know if reverse will load the whole file into memory before outputting the lines in reverse order. That would be terrible. Apr 9 '19 at 18:11
  • 1
    @BrunoBronosky, > ...STDIN, but optionally from @ ARGV : yes that is what <> is for. > ... will load the whole file into memory... : YES, IT WILL! (avoid doing this with gigabyte files)
    – JJoao
    Apr 10 '19 at 7:45
0

Install gnu coreutils already compiled with Rudix:

sudo rudix install coreutils

Or download and gui install Rudix coreutils

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.