62

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.

67

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.

| improve this answer | |
  • 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. – Ran Ever-Hadani Feb 17 '19 at 21:34
75

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
| improve this answer | |
  • 12
    So, alias tac='tail -r' will do the trick for OP! – mkc Feb 7 '14 at 17:18
  • 10
    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? – Subin Sebastian 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. – Stéphane Chazelas Nov 7 '19 at 21:45
0

Install gnu coreutils already compiled with Rudix:

sudo rudix install coreutils

Or download and gui install Rudix coreutils

| improve this answer | |
0

One temporary solution could be:

alias tac='perl -e "print reverse(<>)"'
| improve this answer | |
  • 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. – Bruno Bronosky Apr 9 '19 at 18:11
  • @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

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.