Bashを使用してコマンド出力からデータを抽出する方法は?

Bashを使用してコマンド出力からデータを抽出する方法は?

私はLinuxを初めて使用し、この出力から「DRIVE GB」を取得したいと思います。

[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 

DRIVE 270.98GBで「270.38」を手に入れたいです。ここでいくつかの記事を読んでsedを試してみましたが、うまくいきませんでした。

答え1

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

1つ以上の10進数シーケンスまたは行の.先頭に1つ以上のスペースが続くシーケンスを抽出します。DRIVE

sedそのオプションをサポートすると、-Eはるかに美しいです。

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

それにもかかわらず、以下を使用することもできますperl

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

GNUを使用する場合grep(最近\K)PCREサポートでビルドするとき:

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

を使用すると、awk次の操作も実行できます。

drive quota | awk '$1 == "DRIVE" {print 0+$2}'

関連情報