如何使用 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 个或多个十进制数字的序列,或者在行开头.跟随 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}'

相关内容