Bash:提取一部分string

假设我有string“使用的内存:19.54M”我将如何从中提取19.54? 19.54会经常改变,所以我需要将它存储在一个variables中,并将其与下一次迭代中的值进行比较。

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

你可能想要提取它,而不是删除它。 您可以使用参数扩展来提取值:

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只能比较整数,它没有浮点数的支持。

其他可能的解决方

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}'` 

您可以使用=~运算符来使用bash regex支持,如下所示:

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

这将打印19.54

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