2012-10-01 81 views
34

假設我有字符串「Memory Used:19.54M」 如何從中提取19.54? 19.54會經常改變,所以我需要將它存儲在一個變量中,並將它與下一次迭代的值進行比較。Bash:提取部分字符串

我想我需要的grep和正則表達式的某種組合,但我從來沒有真正理解正則表達式..

+0

可能重複[如何修剪來自bash變量的空白?](http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variabl e) – user2284570

回答

60

你可能想提取它,而不是刪除它。您可以使用參數擴展來提取值:

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只能比較整數,它沒有浮點算術支持。

+0

提取可以更好地解釋我想要做什麼。那麼我將如何更改第三行以刪除「。」和所有遵循它? – 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

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}'` 
3

你可以使用bash的正則表達式的支持與=~運營商,內容如下:

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

這將打印19.54