如何从终端输出中仅检索所需的行?
我想让我们说第三行的df -h
输出。
我应该使用什么样的命令?
无论内容如何,都将输出第3行。
df -h | sed -n 3p
df
命令实际上接受一个标识所需文件系统的参数。 所以你可以使用,例如, df /home
或df /dev/sda3
。
如果您打算解析脚本的输出,您将需要使用df -P
来保证它永远不会包装到多行。 因此,例如,您可以使用df -Ph /home | tail -n +2
df -Ph /home | tail -n +2
(但是如果要解析脚本的输出,请注意文件名中包含空格的可能性)
你可以使用head
和tail
的组合:
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
查找包含特定字符串的行。