44

假设我有字符串“Memory Used: 19.54M”我将如何从中提取 19.54?19.54 会经常变化,所以我需要将它存储在一个变量中,并将其与下一次迭代的值进行比较。

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

4

4 回答 4

83

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

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 只能比较整数,它不支持浮点运算。

于 2012-10-01T10:25:48.883 回答
47

其他可能的解决方案:

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}'`
于 2012-10-01T15:09:47.287 回答
4

您可以将 bash 正则表达式支持与=~运算符一起使用,如下所示:

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

这将打印19.54

于 2016-01-11T18:46:12.817 回答
1
> echo "Memory Used: 19.54M" | perl -pe 's/\d+\.\d+//g'
Memory Used: M
于 2012-10-01T10:43:10.827 回答