我注意到人们通常使用head -n | tail -n 1
Shell 来查找文件的第 n 行。
例如,如果我被要求查找文件的第 7 行,为什么不直接使用head -7
而不是使用 来创建管道tail
?
答案1
head -7
或其现代和标准的等价物:
head -n 7
打印输入的前 7 行(如果较少,则最多打印 7 行)。
通过管道将其tail -n 1
从其中取出最后一行,因此仅第7行或最后一行(如果行数较少)。
为了仅获取第 7行(如果行数较少则不获取任何内容),您可以使用:
tail -n +7 | head -n 1
对于较大的值或行号来说,由于通过管道的数据较少,因此效率也会更高。
您也可以通过一个sed
命令来完成此操作:
sed '7!d;q'
尽管这可能效率较低,因为它sed
不像head
和那样专业化tail
,并且与/sed
相反,不需要能够处理比这更长的行,具体取决于实现可能无法在过长的行上工作。head
tail
LINE_MAX
请注意,sed -n 7p
或按照注释中的建议,即使在打印第sed '7!d'
7 行后也要读取整个输入,而不是像那样停止阅读。这效率较低,但在某些情况下,例如当应用于命令的输出时,我们不想在输出第7 行后终止该命令,这可能更可取。head