假设我有一个字符串 "Memory Used: 19.54M",如何从中提取出 19.54? 由于 19.54 经常变化,因此需要将其存储在一个变量中,并与下一次迭代的值进行比较。
我想我需要一些 grep 和正则表达式的组合,但我从来没有真正理解过正则表达式..
假设我有一个字符串 "Memory Used: 19.54M",如何从中提取出 19.54? 由于 19.54 经常变化,因此需要将其存储在一个变量中,并与下一次迭代的值进行比较。
我想我需要一些 grep 和正则表达式的组合,但我从来没有真正理解过正则表达式..
您可能希望提取它而不是删除它。您可以使用参数扩展来提取该值:
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 只能比较整数,它不支持浮点数算术运算。
${var%.*}
去除字符串末尾的点和其后面的任何字符。 - choroba#
表示“从左边移除”,而*
只是一个通配符,可以匹配任何内容。 - choroba${var//[A-Z,a-z,:]}
达到相同的效果。 - Vadim KOT其他可能的解决方案:
使用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正则表达式,如下所示:
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