我有这一行:
io=9839.1MB, bw=4012.3KB/s, iops=250, runt=2511369msec
我需要提取数字,得到这样的输出:
9839.1 4012.3 250 2511369
我尝试使用sed 's/[^0-9.]*//g'
,但数字并没有相互分开。
我该怎么做?
答案 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)
$ 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除了数字,句号和空格以外的所有内容。