Como posso extrair dados de uma saída de comando com o Bash?

1

Sou novo no Linux e gostaria de obter o "DRIVE GB" desta saída:

[randall@home gdrive]$ drive quota 
Name: Randall D
Account type:   UNLIMITED
Bytes Used: 290959662516         (270.98GB)
Bytes Free: 10995116277760       (10.00TB)
Bytes InTrash:  0                    (0.00B)
Total Bytes:    11286075940276       (10.26TB)

* Space used by Google Services *
Service                              Bytes                               
DRIVE                                270.98GB                            
PHOTOS                               0.00B                               
GMAIL                                0.00B                               
Space used by all Google Apps        270.98GB 

Eu quero pegar o "270.38" da DRIVE 270.98GB. Eu tentei com sed ler alguns posts aqui, mas não consegui.

    
por Randall 05.12.2017 / 21:32

1 resposta

3

drive quota | sed -n 's/^DRIVE[[:blank:]]\{1,\}\([0-9.]\{1,\}\).*//p'

Extrairia as sequências de 1 ou mais dígitos decimais ou . seguindo uma sequência de 1 ou mais espaços em branco seguindo o próprio DRIVE no início da linha.

Se o seu sed suportar a opção -E , será mais bonito com:

drive quota | sed -En 's/^DRIVE[[:blank:]]+([0-9.]+).*//p'

Mesmo assim, você pode usar também perl :

drive quota | perl -lne 'print $1 if /^DRIVE\h+([\d.]+)/'

Com o GNU grep , quando compilado com (recente para \K ) suporte a PCRE:

drive quota | grep -Po '^DRIVE\h+\K[\d.]+'

Com awk , você também pode fazer:

drive quota | awk '$1 == "DRIVE" {print 0+$2}'
    
por 05.12.2017 / 21:41