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

emr*_*cnl 17 command-line text-processing

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

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

小智 31

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

df -h | sed -n 3p
Run Code Online (Sandbox Code Playgroud)


Ran*_*832 16

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

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

  • 就是这样!而不是解析输出,使用命令来提供_just_你想要的。 (2认同)

hee*_*ayl 14

您可以使用组合headtail

df -h | head -3 | tail -1
Run Code Online (Sandbox Code Playgroud)

或者

df -h | tail -n +3 | head -1
Run Code Online (Sandbox Code Playgroud)

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

检查man df

  • +1 提到 df 可以过滤特定条目 (4认同)
  • 实际上,在管道到外部程序之前过滤数据本身几乎总是更好。 (2认同)

Ser*_*nyy 10

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

df -h | awk 'NR == 3'
Run Code Online (Sandbox Code Playgroud)


Byt*_*der 6

我假设您不一定要查找第三行,而是查找提及特定磁盘(例如/dev/sda3)或特定安装点(例如/home)的行。

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

你的工具是grep.

例如,如果您想要有关 device 的行/dev/sda3,请键入:

df -h | grep '/dev/sda3'
Run Code Online (Sandbox Code Playgroud)

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

df -h | grep '/home'
Run Code Online (Sandbox Code Playgroud)

  • 或者 `df -h /dev/sda3` 或 `df -h /home`(后者即使不是挂载点也能工作)。 (3认同)

ter*_*don 6

您还可以使用perl

df -h | perl -ne 'print if $.==3' 
Run Code Online (Sandbox Code Playgroud)

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