Как получить определенную часть результата команды?

От результата этой команды:

diskutil info / | grep "Free Space"

который является чем-то вроде этого:

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

Я хочу добраться только

31.5 GB

Как я могу сделать это?

-1
задан 12 March 2016 в 16:06

3 ответа

Можно использовать awk для распечатывания approriate информации, разделяя строку в двух использованиях : как разделитель полей.

diskutil info / | awk -F':' '/Free Space/ {gsub(/\(.*/,"");  gsub(/\ /,""); print $2}'
1
ответ дан 29 September 2019 в 10:22

На Ubuntu 14.04 и выше, просто используйте df:

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

Для избавлений от заголовка столбца:

$ df -h --output=size / | tail -1 
  30G
1
ответ дан 29 September 2019 в 10:22

Используя 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
ответ дан 29 September 2019 в 10:22

Другие вопросы по тегам:

Похожие вопросы: