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