从该命令的结果来看:
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