POSIX 头部和尾部不具有等效功能

POSIX 头部和尾部不具有等效功能

的文档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情况,它只需要计算在开始打印之前要跳过多少行。

相关内容