12

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

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

head -n -4 main.m

手册页:

-n, --lines=[-]N 打印前 N 行而不是前 10 行;使用前导“-”,打印每个文件的最后 N 行以外的所有行

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

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

head: 非法行数 -- -4

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

4

3 回答 3

13

GNU 版本head支持负数。

brew install coreutils
ghead -n -4 main.m
于 2015-04-21T00:57:43.823 回答
3

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
于 2013-04-25T06:01:41.770 回答
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>=4 { print a[n%4] } { a[n++%4]=$0 }'但我不确定是否所有 awk 实现都支持它。

于 2013-04-25T04:59:45.273 回答