От результата этой команды:
diskutil info / | grep "Free Space"
который является чем-то вроде этого:
Volume Free Space: 31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)
Я хочу добраться только
31.5 GB
Как я могу сделать это?
Можно использовать awk для распечатывания approriate информации, разделяя строку в двух использованиях :
как разделитель полей.
diskutil info / | awk -F':' '/Free Space/ {gsub(/\(.*/,""); gsub(/\ /,""); print $2}'
На Ubuntu 14.04 и выше, просто используйте df
:
$ df -h --output=size /
Size
30G
Для избавлений от заголовка столбца:
$ df -h --output=size / | tail -1
30G
Используя 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