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