2012-10-01 7 views
34

「Memory Used:19.54M」という文字列があります。 どうすれば19.54を抽出できますか? 19.54は頻繁に変更されるので、変数に格納して次の反復で値と比較する必要があります。Bash:文字列の一部を抽出する

おそらくエキスにではなく、にそれを削除したい

+0

が重複する可能性が印刷されます[トリムする方法bash変数の空白?](http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variabl e) – user2284570

答えて

60

..私は、私はgrepをし、正規表現のいくつかの組み合わせを必要と想像しますが、私は実際に正規表現を理解していませんでした。あなたは値を抽出するパラメータ展開を使用することができます。bashは整数だけを比較することができ

var="Memory Used: 19.54M" 
var=${var#*: }   # Remove everything up to a colon and space 
var=${var%M}    # Remove the M at the end 

注意、それは浮動小数点演算をサポートしていません。

+0

私がしたいことをExtractがうまく説明します。どのようにして3番目の行を変更して、 "。"それに続くすべては? – confusified

+8

'$ {var%。*}'は、文字列の末尾にあるドットとそれに続くすべてを削除します。 – choroba

+0

パーフェクト:)ただ必要なもの! – confusified

1
> echo "Memory Used: 19.54M" | perl -pe 's/\d+\.\d+//g' 
Memory Used: M 
33

他の可能な解決策:

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付:

awk
var="Memory Used: 19.54M" 
var=`echo "$var" | cut -d ' ' -f 3 | cut -d 'M' -f 1` 

var="Memory Used: 19.54M" 
var=`echo "$var" | awk -F'[M ]' '{print $4}'` 
3

次のようにあなたは、=~オペレータで、bashの正規表現のサポートを使用することができます。

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

これはの19.54