2013-04-17 41 views
1

我試圖從文件中檢索內存值,並將其與參考值進行比較。但一次一件事...... 我試圖使用set/source/grep/substring變量,但他們沒有實際工作。然後我找到了一種使用for循環的方法(請參閱代碼)。 問題:我正在從文件接收整個字符串,但我無法設法擺脫它中的最後一個字符。從文件中提取字符串後從文件中捕獲它

#!/bin/bash 

#source start_params.properties 
#mem_val= "$default.default.minmaxmemory.main" 
#mem_val= grep "default.default.minmaxmemory.main" start_params.properties 
for mLine in $(grep 'default.default.minmaxmemory.main' start_params.properties) 
    do 
    echo "$mLine" 
done 
echo "${mLine:4:5}" # didn't get rid of the last `m` in `-max4095m` 
v1="max" 
v2="m" 
echo "$mLine" | sed -e "s/.*${v1}//;s/${v2}.*//" #this echo the right value. 

循環迭代兩次:第一次 輸出:default.default.minmaxmemory.main=-min512m 第二輸出:-max4096m 然後sed命令輸出爲4096,但我怎麼可以更改代碼的最後一行S.T.它會將該值存儲在變量中?

謝謝你的建議,

+1

使用命令替換:'v = $(echo「$ mLine」| sed -e「s /.*$ {v1} //; s/$ {v2}。* //」)'。替代方法:如果您只需要清除非數字字符,請使用:'v = $(tr -dC'[:digit:]'<<<「$ mLine」)''。 – mklement0

+0

@mklement太好了!非常感謝,我使用了後者。 –

+0

不客氣。這裏有一個bash備忘單可能會派上用場:http://mywiki.wooledge.org/BashSheet – mklement0

回答

0

你可以使用grep過濾max的一部分d然後是另一個grep -o來提取數字:

echo "$mLine" | grep "$max" | grep -o '[[:digit:]]*' 
+0

'grep'命令的稍微縮短版本:'egrep -o'\ d +'' – mklement0

+0

嗨h3nr1x,感謝您的建議,但是當我嘗試'echo「$ mLine」| grep「-max」| grep -o'[[:digit:]] *'''grep'不喜歡max的'-'符號。 –

+0

當我從'max'的正面刪除'-'時,輸出與我的初始''max4096m'相同 –

0
$ sed '/max[0-9]/!d; s/.*max//; s/m//' start_params.properties 
4096 
  • 刪除線不匹配max[0-9]
  • 刪除線的第一部分,直到max
  • 除去最後m
+0

嗨@Steven,我很抱歉,但這不起作用,因爲max不是文件中的唯一名稱。這就是我首先尋找房產的原因。 –