【发布时间】:2013-04-10 14:55:00
【问题描述】:
我正在尝试从文件中检索内存值,并将其与参考值进行比较。但一次只做一件事...... 我尝试使用 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. 中的最后一行?它会将值存储在变量中吗?
感谢您的建议,
【问题讨论】:
-
使用命令替换:
v=$(echo "$mLine" | sed -e "s/.*${v1}//;s/${v2}.*//")。替代方案:如果您只需要删除非数字字符,请使用:v=$(tr -dC '[:digit:]' <<<"$mLine")。 -
@mklement 太好了!非常感谢,我用的是后者。
-
不客气。这是一个可能会派上用场的 bash 备忘单:mywiki.wooledge.org/BashSheet
标签: string bash variables for-loop sed