假設我有字符串「Memory Used:19.54M」 如何從中提取19.54? 19.54會經常改變,所以我需要將它存儲在一個變量中,並將它與下一次迭代的值進行比較。Bash:提取部分字符串
我想我需要的grep和正則表達式的某種組合,但我從來沒有真正理解正則表達式..
假設我有字符串「Memory Used:19.54M」 如何從中提取19.54? 19.54會經常改變,所以我需要將它存儲在一個變量中,並將它與下一次迭代的值進行比較。Bash:提取部分字符串
我想我需要的grep和正則表達式的某種組合,但我從來沒有真正理解正則表達式..
你可能想提取它,而不是刪除它。您可以使用參數擴展來提取值:
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只能比較整數,它沒有浮點算術支持。
提取可以更好地解釋我想要做什麼。那麼我將如何更改第三行以刪除「。」和所有遵循它? – confusified
'$ {var%。*}'在字符串的末尾刪除一個點及其後的任何內容。 – choroba
完美:)只是我需要! – confusified
> echo "Memory Used: 19.54M" | perl -pe 's/\d+\.\d+//g'
Memory Used: M
其他可能的解決方案:
隨着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
可能重複[如何修剪來自bash變量的空白?](http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variabl e) – user2284570