Você pode usar o awk para imprimir informações apropriadas, dividindo a linha em duas usando : como separador de campo.
diskutil info / | awk -F':' '/Free Space/ {gsub(/\(.*/,""); gsub(/\ /,""); print $2}'
Do resultado deste comando:
diskutil info / | grep "Free Space"
que é algo assim:
Volume Free Space: 31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)
Eu quero apenas obter
31.5 GB
Como posso fazer isso?
Você pode usar o awk para imprimir informações apropriadas, dividindo a linha em duas usando : como separador de campo.
diskutil info / | awk -F':' '/Free Space/ {gsub(/\(.*/,""); gsub(/\ /,""); print $2}'
Usando grep com PCRE ( -P ):
diskutil info / | grep -Po 'Free Space:\s+\K[^(]+(?=\s+\()'
Free Space:\s+ corresponde à parte antes da saída desejada, \K descarta a correspondência
[^(]+ corresponde à saída desejada, o padrão lookahead positivo de largura zero (?=\s+\() garante que a correspondência seja seguida por espaços em branco e ( .
Lógica semelhante usando sed :
diskutil info / | sed -r 's/.*Free Space:\s+([^(]+)\s+\(.*//'
Exemplo:
% 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+\(.*//' <<<'Volume Free Space: 31.5 GB (31519584256 Bytes) (exactly 61561688 512-Byte-Units)'
31.5 GB
No Ubuntu 14.04 e acima, use apenas df :
$ df -h --output=size /
Size
30G
Para se livrar do cabeçalho da coluna:
$ df -h --output=size / | tail -1
30G