Bash:提取字符串的一部分

时间:2012-10-01 10:18:36

标签: bash

说我有字符串“Memory Used:19.54M” 我如何从中提取19.54? 19.54将经常更改,因此我需要将其存储在变量中,并将其与下一次迭代的值进行比较。

我想我需要一些grep和regex的组合,但我从来没有真正理解正则表达式..

4 个答案:

答案 0 :(得分:73)

您可能希望提取而不是删除它。您可以使用参数扩展来提取值:

var="Memory Used: 19.54M"
var=${var#*: }            # Remove everything up to a colon and space
var=${var%M}              # Remove the M at the end

请注意,bash只能比较整数,它没有浮点算术支持。

答案 1 :(得分:39)

其他可能的解决方案:

使用grep

var="Memory Used: 19.54M"
var=`echo "$var" | grep -o "[0-9.]\+"`

使用sed

var="Memory Used: 19.54M"
var=`echo "$var" | sed 's/.*\ \([0-9\.]\+\).*/\1/g'`

使用cut

var="Memory Used: 19.54M"
var=`echo "$var" | cut -d ' ' -f 3 | cut -d 'M' -f 1`

使用awk

var="Memory Used: 19.54M"
var=`echo "$var" | awk -F'[M ]' '{print $4}'`

答案 2 :(得分:3)

您可以对<plugin name="org.apache.cordova.network-information" spec="0.2.15" source="pgb" /> 运算符使用bash正则表达式支持,如下所示:

=~

这将打印var="Memory Used: 19.54M" if [[ $var =~ Memory\ Used:\ (.+)M ]]; then echo ${BASH_REMATCH[1]} fi

答案 3 :(得分:1)

> echo "Memory Used: 19.54M" | perl -pe 's/\d+\.\d+//g'
Memory Used: M
相关问题