44

「使用メモリ: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 に答える