如何获取命令结果的特定部分?

如何获取命令结果的特定部分?

从该命令的结果来看:

diskutil info / | grep "Free Space"

大致如下:

Volume Free Space:        31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)

我只想得到

31.5 GB

我怎样才能做到这一点?

答案1

grep与 PCRE 一起使用( -P):

diskutil info / | grep -Po 'Free Space:\s+\K[^(]+(?=\s+\()'
  • Free Space:\s+匹配所需输出之前的部分,\K丢弃匹配

  • [^(]+匹配所需的输出,零宽度正向前瞻模式(?=\s+\()确保匹配后跟空格和(

类似逻辑使用sed

diskutil info / | sed -r 's/.*Free Space:\s+([^(]+)\s+\(.*/\1/'

例子:

% grep -Po 'Free Space:\s+\K[^(]+(?=\s+\()' <<<'Volume Free Space:        31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)'
31.5 GB

% sed -r 's/.*Free Space:\s+([^(]+)\s+\(.*/\1/' <<<'Volume Free Space:        31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)'
31.5 GB

答案2

您可以使用 awk 打印出适当的信息,并使用字段:分隔符将行分成两行。

diskutil info / | awk -F':' '/Free Space/ {gsub(/\(.*/,"");  gsub(/\ /,""); print $2}'

答案3

在 Ubuntu 14.04 及以上版本中,只需使用df

$ df -h --output=size /
 Size
  30G

要删除列标题:

$ df -h --output=size / | tail -1 
  30G

相关内容