假设我有字符串“Memory Used: 19.54M”我将如何从中提取 19.54?19.54 会经常变化,所以我需要将它存储在一个变量中,并将其与下一次迭代的值进行比较。
我想我需要一些 grep 和 regex 的组合,但我从来没有真正理解过 regex..
假设我有字符串“Memory Used: 19.54M”我将如何从中提取 19.54?19.54 会经常变化,所以我需要将它存储在一个变量中,并将其与下一次迭代的值进行比较。
我想我需要一些 grep 和 regex 的组合,但我从来没有真正理解过 regex..
您可能想要提取它而不是删除它。您可以使用参数扩展来提取值:
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 正则表达式支持与=~
运算符一起使用,如下所示:
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