我想输出文件的所有行,但是在终端上跳过最后4行。
根据UNIX手册页,以下内容可能是一个解决方案。
head -n -4 main.m
MAN页面:
-n, - lines = [ - ] N. 打印前N行而不是前10行;带头 - ' - ',打印除了每个文件的最后N行之外的所有行
我在这里阅读了手册页。 http://unixhelp.ed.ac.uk/CGI/man-cgi?head
但是在MAC OSx上我得到了以下错误。
头:非法行数 - -4
为实现这一目标还有什么可以做的?
答案 0 :(得分:8)
head
的GNU版本支持负数。
brew install coreutils
ghead -n -4 main.m
答案 1 :(得分:3)
Python one-liner:
$ 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
答案 2 :(得分:2)
例如使用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实现都支持它。