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

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

我应该使用什么样的命令?

无论内容如何,​​都将输出第3行。

 df -h | sed -n 3p 

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

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

你可以使用headtail的组合:

 df -h | head -3 | tail -1 

要么

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

但请注意, df允许从df本身的选项中过滤输出,您应该在使用任何外部命令之前先查看这些输出。

检查man df

Awk是文本处理工具,因此适合此任务

 df -h | awk 'NR == 3' 

我假设您不一定要寻找第三行,而是寻找特定磁盘(例如/dev/sda3 )或特定挂载点(例如/home )的行。

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

你的工具是grep

例如,如果您想要关于设备/dev/sda3 ,请键入:

 df -h | grep '/dev/sda3' 

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

 df -h | grep '/home' 

你也可以使用perl

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

$. 是当前行号,因此perl -ne 'print if $.==N' ,您可以使用perl -ne 'print if $.==N'第N行。

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

例:

 df -h | head -3 | tail -1 

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

或者,如果您知道输出的外观,也可以使用grep查找包含特定字符串的行。