如何使用 Bash 从命令输出中提取数据?

1 bash text-processing output google-drive

我是 Linux 新手,我想从此输出中获取“DRIVE GB”:

\n\n
[randall@home gdrive]$ drive quota \nName: Randall D\nAccount type:   UNLIMITED\nBytes Used: 290959662516         (270.98GB)\nBytes Free: 10995116277760       (10.00TB)\nBytes InTrash:  0                    (0.00B)\nTotal Bytes:    11286075940276       (10.26TB)\n\n* Space used by Google Services *\nService                              Bytes                               \nDRIVE                                270.98GB                            \nPHOTOS                               0.00B                               \nGMAIL                                0.00B                               \nSpace used by all Google Apps        270.98GB \n
Run Code Online (Sandbox Code Playgroud)\n\n

我想从 DRIVE 270.98GB 获取“270.38”。我尝试使用 sed 阅读一些帖子,但无法\xe2\x80\x99 得到它。

\n

Sté*_*las 6

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

将提取 1 个或多个十进制数字的序列,或者在行开头.跟随 1 个或多个空格的序列。DRIVE

如果您sed支持该-E选项,那么它会更漂亮:

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

尽管如此,你也可以使用perl

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

使用 GNU 时grep,当使用(最近的\K)PCRE 支持构建时:

drive quota | grep -Po '^DRIVE\h+\K[\d.]+'
Run Code Online (Sandbox Code Playgroud)

使用awk,您还可以执行以下操作:

drive quota | awk '$1 == "DRIVE" {print 0+$2}'
Run Code Online (Sandbox Code Playgroud)