从行中获取数字并将其分为bash

时间:2017-01-22 09:49:46

标签: bash shell sed

我有这一行:

io=9839.1MB, bw=4012.3KB/s, iops=250, runt=2511369msec

我需要提取数字,得到这样的输出:

9839.1 4012.3 250 2511369

我尝试使用sed 's/[^0-9.]*//g',但数字并没有相互分开。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

删除除数字,点和空白之外的所有内容:

echo 'io=9839.1MB, bw=4012.3KB/s, iops=250, runt=2511369msec' | tr -cd '0-9. '

输出:

9839.1 4012.3 250 2511369

答案 1 :(得分:1)

您对sed的尝试几乎是正确的,只需添加一个空白字符即可从替换中排除,

sed 's/[^0-9. ]*//g' file
9839.1 4012.3 250 2511369

您还可以GNU grep使用-E正则表达式语法,-o仅匹配包含数字和点的单词。

grep -o -E '[0-9.]+' file
9839.1
4012.3
250
2511369

答案 2 :(得分:0)

The Fish



imageUrl = hr.getExtra();




如何捕鱼: 这是一个梦幻般的regex101,其中包含一个包含大量知识库的所见即所得的正则表达式编辑器。 https://regex101.com/r/a2scnd/1

答案 3 :(得分:0)

使用shell parameter expansion

$ var='io=9839.1MB, bw=4012.3KB/s, iops=250, runt=2511369msec'
$ echo "${var//[![:digit:]. ]}"
9839.1 4012.3 250 2511369

具体来说,这会使用${parameter//pattern/string} string 以及 pattern 的否定括号表达式:{{1除了数字,句号和空格以外的所有内容。