我有以下问题。
在脚本中,我必须在/dev/xvda1
路径上执行hdparm
命令。从命令输出中,我必须提取计算出的MB/sec值。
/dev/xvda1:
Timing cached reads: 15900 MB in 1.99 seconds = 7986.93 MB/sec
Timing buffered disk reads: 478 MB in 3.00 seconds = 159.09 MB/sec
我必须提取7986.93和159.09。
我试着:
grep -o -E '[0-9]+'
,但它返回给我所有的六个数字在输出grep -o -E '[0-9]'
,但是它只返回六个值中的第一个字符。grep -o -E '[0-9]+$'
,但输出为空,我想是因为数字不是输出的最后一个字符集。
我怎样才能达到我的目的?
要获得最后一个数字,您可以在前面添加.*
,这将尽可能多地匹配,吞噬所有其他数字。但是,要从输出中排除该部分,您需要GNU grep或pcregrep或sed。
grep -Po '.* K[0-9.]+'
或
sed -En 's/.* ([0-9.]+).*/1/p'
考虑使用awk只打印您想要的字段,而不匹配数字。这将在每个Unix机器的任何shell中使用任何awk:
$ hdparm whatever | awk 'NF>1{print $(NF-1)}'
7986.93
159.09