【问题标题】:head command to skip last few lines of file on MAC OSX在 MAC OSX 上跳过文件最后几行的 head 命令
【发布时间】:2013-04-18 20:39:54
【问题描述】:

我想在终端上输出文件的所有行,但跳过最后 4 行。

根据 UNIX 手册页,以下可能是一个解决方案。

head -n -4 main.m

手册页:

-n, --lines=[-]N 打印前 N 行而不是前 10 行;与铅- ing '-',打印除每个文件的最后 N 行以外的所有行

我在这里阅读了手册页。 http://unixhelp.ed.ac.uk/CGI/man-cgi?head

但在 MAC OSx 上我得到以下错误。

head: 非法行数 -- -4

还可以做些什么来实现这个目标?

【问题讨论】:

  • 不是批评;只是好奇。您在哪里阅读了 head 的手册页?也许不在您正在运行的 Mac OS X 计算机上?我问是因为我的 Mac OS X 计算机上的 head 手册页没有提到 leading '-' 参数。 (见man head
  • @btnaka 这里是..unixhelp.ed.ac.uk/CGI/man-cgi?head。因为我不太习惯在终端上阅读和搜索,所以我用谷歌搜索了它....
  • 啊。试一试。我想你会发现这很容易。要查看任何命令的手册页,请键入 man 。例如,要查看 head 手册页,请键入:man head。长手册页将显示在您的默认寻呼机中(可能是 less)。前进,击中空间。要返回,请按 b。如需更多帮助,请点击 h。
  • @btanaka 它在我的身上,另请参阅developer.apple.com/library/mac/documentation/Darwin/Reference/… 我遇到了同样的问题。
  • @btanaka 您可以在 Mac 上使用info head 访问它。

标签: shell command-line terminal osx-lion


【解决方案1】:

GNU 版本的head 支持负数。

brew install coreutils
ghead -n -4 main.m

【讨论】:

    【解决方案2】:

    Python 单线:

    $ cat foo
    line 1
    line 2
    line 3
    line 4
    line 5
    line 6
    $ python -c "import sys; a=[]; [a.append(line) for line in sys.stdin]; [sys.stdout.write(l) for l in a[:-4]]" < foo
    line 1
    line 2
    

    【讨论】:

    • 不应该在 Python o_O 中编写单行代码
    【解决方案3】:

    awk 为例:

    $ cat file
    line 1
    line 2
    line 3
    line 4
    line 5
    line 6
    $ awk 'n>=4 { print a[n%4] } { a[n%4]=$0; n=n+1 }' file
    line 1
    line 2
    $
    

    它可以简化为awk 'n&gt;=4 { print a[n%4] } { a[n++%4]=$0 }',但我不确定是否所有的 awk 实现都支持它。

    【讨论】:

    • 这会打印最后两行。这可以使用 tail -2 文件来完成
    猜你喜欢
    • 2018-04-08
    • 2016-04-24
    • 2019-09-08
    • 2015-01-20
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2016-10-04
    相关资源
    最近更新 更多