的文档POSIX 尾部的-n
选项表示
计数原点为1;也就是说,-n +1 表示文件的第一行,-n -1 表示最后一行。
因此tail -n 10
(稍后在同一页上使用)并且tail -n -10
应该打印最后十行,并tail -n +10
跳过前九行并打印其余所有行。
的文档POSIX头的-n
选项表示
应用程序应确保 number 选项参数是正十进制整数。
因此head -n -10
和 与POSIX 不兼容,因为和 的head -n +10
值不是简单的整数,而是在 shell 中没有特殊含义的字符串,并且无法打印直到第 N 个最后一行之前的所有行。为什么会出现差异?-10
+10
PS:head -n +10
与 GNU coreutils 一起使用。
答案1
因为没有人认为您正在寻找的功能值得实现,所以没有语法来请求它。
考虑一下需要如何实施。首先,您必须查找到文件的末尾,向后扫描以找出倒数第 N 行的开始位置,记下该位置,返回到开头,然后打印行,直到到达您想要的位置。记得。这比通常情况要复杂得多head
。 (或者,您可以将整个文件读入内存,删除最后 N 行,然后打印其余行。)但更重要的是,它不适用于不可查找的流。
另一方面,tail
的功能实现起来相当简单。它永远不需要存储超过 N 行(在本-n -N
例中)。对于这种-n +N
情况,它只需要计算在开始打印之前要跳过多少行。