Como obter uma parte específica de um resultado de comando?

-1

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?

    
por Lachlan Jones 12.03.2016 / 11:03

3 respostas

2

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}'
    
por Sergiy Kolodyazhnyy 12.03.2016 / 11:11
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
    
por heemayl 12.03.2016 / 11:07
2

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
    
por muru 12.03.2016 / 11:17