Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 从文件中捕获字符串后,从字符串中提取数字_String_Bash_Variables_For Loop_Sed - Fatal编程技术网

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

String 从文件中捕获字符串后,从字符串中提取数字,string,bash,variables,for-loop,sed,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=

我试图从文件中检索内存值,并将其与引用值进行比较。但一次只做一件事。。。。 我曾尝试将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.中的最后一行。它将把值存储在变量中

谢谢您的建议,

$sed'/max[0-9]/!Ds/*max/;s/m/'启动参数属性
4096
  • 删除不匹配的行
    max[0-9]
  • 删除行的第一部分,直到
    max
  • 删除最终
    m

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

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

略短一点的
grep
命令版本:
egrep-o'\d+'
Hi h3nr1x,谢谢你的建议,但是当我尝试
echo“$mLine”| grep“-max”| grep-o'[[:digit:]*“
grep
不喜欢max前面的
-
符号。当我从
max
前面删除
-
时,输出与我最初的
max4096m
相同。只需使用
grep-“-max”
--
告诉grep,下面的任何内容都不是选项。谢谢@h3nr1x-我很感激。你好@Steven,很抱歉,这不起作用,因为max在文件中不是唯一的名称。这就是我首先查找属性的原因。使用命令替换:
v=$(echo“$mLine”| sed-e“s/*${v1}/;s/${v2}.*/')
。备选方案:如果您只需要去除非数字字符,请使用:
v=$(tr-dC'[:digit:''@mklement太好了!非常感谢,我使用了后者。不客气。这里有一个bash备忘单,可能会派上用场: