如何在OS X上获取tac命令?


59

我喜欢用来tac反转的输出cat。但是,它在Mavericks终端中不可用。我试图在MacPorts上找到它,但它再次不可用。谁能告诉我如何获得tac?这对于读取日志文件非常有帮助。

Answers:


65

是:

  • 安装自制软件
  • brew install coreutils
  • ln -s /usr/local/bin/gtac /usr/local/bin/tac 显然不需要最新的Homebrew,请参阅下面的Ran Ever-Hadani的评论

或使用MacPorts以coreutils类似方式安装。


我不知道ln -s /usr/local/bin/gtac /usr/local/bin/tac它是如何工作的……那不是只应该列出一些文件存储块的命令吗?
蒂莫西·斯旺

1
符号链接只是为了方便。Homebrew通过在/ usr / local / bin中使用原始名称前缀'g'来安装coreutil二进制文件。lsglsheadghead等。因此,tac被安装为gtac,并且该答案中建议的符号链接仅以tac该名称提供。省略符号链接,您仍然可以运行程序gtac
grebneke

哦。您正在谈论的ln -s不是ls -s现在。我一定是第一次正确输入了它。
蒂莫西·斯旺

2
除了grebneke的答案:不再需要软链接。现在仅当osx已经有一个具有该名称的命令时才添加g后缀,因此tac被安装为tac,而不是gtac。
Ran Ever-Hadani

69

在OS / X上,例如在许多系统(BSD,Solaris,AIX,IRIX ...)上,tac可以tail通过-r 选件使用GNU功能。因此,无需安装GNU tac

tail -r the-file

11
因此,alias tac='tail -r'将为OP做花招!
mkc 2014年

8
好吧,实际上使用Shell别名可能会失败,因为别名不会转移到Shell脚本中。使用类似功能tac() { tail -r -- "$@"; }
kojiro


0

一种临时解决方案可能是:

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

1
这不仅使我了解到,<>它不仅可以从STDIN中读取,还可以从中读取@ARGVstackoverflow.com/questions/29020883/…我仍然不知道reverse在以相反顺序输出行之前是否将整个文件加载到内存中。那太可怕了。
Bruno Bronosky

@BrunoBronosky,> ... STDIN,但可选地来自@ ARGV:是的,这就是<>的含义。> ...会将整个文件加载到内存中...:是的,它将!(避免使用千兆字节文件执行此操作)
JJoao
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.