从文件中捕获数字后从字符串中提取数字

时间:2013-04-17 17:58:25

标签: string bash variables for-loop sed

我正在尝试从文件中检索内存值,并将其与参考值进行比较。但有一件事一次...... 我尝试使用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中的最后一行。它会将值存储在变量中吗?

感谢您的建议,

2 个答案:

答案 0 :(得分:0)

$ sed '/max[0-9]/!d; s/.*max//; s/m//' start_params.properties
4096
  • 删除与max[0-9]
  • 不匹配的行
  • 删除行的第一部分,直到max
  • 删除最终m

答案 1 :(得分:0)

您可以使用grep过滤max部分,然后使用另一个grep -o来提取数字:

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