如何从终端输出中仅检索所需的行?


16

我只想说df -h输出的第三行。

我应该使用哪种命令?


16
未来的注意事项:这个问题非常基本。通常建议您在询问之前表现出一定的努力和尝试过的东西。
Sergiy Kolodyazhnyy

虽然使用假定的静态格式来获取文件的第三行可能是合法的,但这不同于诊断程序的第三行,其输出随系统状态的不同而不同。例如,在您当前的第3行弹出之前,请按字母顺序安装新驱动器/分区。因此,@ Random832在下面的答案是最好的。
MarkHu

Answers:


31

无论内容如何,​​这将输出第三行。

df -h | sed -n 3p

+1为最小答案:df -h|sed -n 3p
EKons,2016年

16

df命令实际上接受一个标识所需文件系统的参数。因此,您可以使用df /homedf /dev/sda3

如果您打算解析脚本的输出,则需要使用df -P以确保它永远不会换成多行。因此,例如,您可以使用df -Ph /home | tail -n +2(但是,如果要解析脚本的输出,请注意文件名中包含空格的可能性)


2
而已!相反解析输出,使用命令来提供只是你想要什么。
fedorqui

1
但OP表示他希望第3行df /home提供标题。您在解释用户的目的。也许你是对的。你可能错了,谁知道?
Mike S

@MikeS其他许多答案已经涵盖了在没有上下文的情况下获取第3行。我提供了其他信息,以便OP对他有用。并tail -n +2删除标题。
Random832 '16

14

您可以使用组合headtail

df -h | head -3 | tail -1

要么

df -h | tail -n +3 | head -1

但是请注意,由于df允许从其df自身的选项中过滤输出,因此在使用任何外部命令之前,应先查看那些选项。

检查man df


4
+1表示df可以过滤特定条目
Sergiy Kolodyazhnyy 2016年

2
确实,在传递给外部程序之前,过滤数据本身几乎总是更好。
Zach Mertes


6

我认为您不一定要寻找第三行,而是寻找提到特定磁盘(例如/dev/sda3)或特定安装点(例如/home)的那一行。

因此,您不仅可以显示第三行,因为输出顺序可能会更改并且可能会得到不同的结果,因此这是不安全的,您可以按内容过滤输出,仅显示与特定模式匹配或包含关键字的行。

您的工具是grep

例如,如果要关于device的行/dev/sda3,请输入:

df -h | grep '/dev/sda3'

如果您希望将提及您的主目录的行作为挂载点,请使用:

df -h | grep '/home'

3
df -h /dev/sda3df -h /home(即使不是挂载点,后者也可以)。
Random832 '16

6

您还可以使用perl

df -h | perl -ne 'print if $.==3' 

$.是当前的行号,这样你就可以打印与第N行perl -ne 'print if $.==N'


1
这就是为什么我认为Perl仍然有意义。它结合了sed和awk以及一种结构化的编程语言(尽管许多人会说这确实很丑陋(我可能会同意))至少对于这些简短的单行代码是一致且非常有用的。谢谢terdon。如果稍微冗长一些,这几乎与sed示例一样简洁。
Mike S

@MikeS很高兴能为您提供帮助。但是,作为Perl黑客,我必须指出,Perl代码只是像您编写的那样丑陋。好的程序员可以在Perl中编写漂亮的代码,只是语言不会强迫您这样做,而且很容易这样做。
terdon

2

我的第一个想法将是头尾构造。

例:

df -h | head -3 | tail -1

head -3导致输出在三行之后停止,并且tail -1仅输出最后一行。

另外,如果您知道输出的外观,则还可以使用它grep来查找包含特定字符串的行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.