我想从字符串中提取一些变量长度。从字符串中提取变量长度
的字符串看起来是这样的:
used_memory:1775220696
我想有一个变量1775220696
部分。这方面有很多问题,但我找不到适合我需求的解决方案。
我想从字符串中提取一些变量长度。从字符串中提取变量长度
的字符串看起来是这样的:
used_memory:1775220696
我想有一个变量1775220696
部分。这方面有很多问题,但我找不到适合我需求的解决方案。
您可以使用cut
:
my_val=$(echo "used_memory:1775220696" | cut -d':' -f2)
或者也awk
:
my_val=$(echo "used_memory:1775220696" | awk -F':' '{print $2}')
使用参数扩展:
string=used_memory:1775220696
num=${string#*:} # Delete everything up to the first colon.
可以用awk来完成,像这样:
var=`echo "used_memory:1775220696" | awk -F':' '{print $2;}'`
echo $var
输出:
1775220696
使用正则表达式:
s/^[^:]*://g
你SED或Perl使用它,让你需要的部分。
> echo "used_memory:1775220696" | perl -pe 's/^[^:]*://g'
1775220696
bash
支持正则表达式匹配,但是对于简单的情况下这样它是矫枉过正;使用参数扩展(请参阅choroba's answer)。
为了完整起见,这里是使用正则表达式匹配的例子:
[[ $string =~ (.*):([[:digit:]]+) ]] && num=${BASH_REMATCH[2]}
我用egrep的
echo used_memory:1775220696 | egrep -o [0-9]+
输出:
1775220696
如果您数字可能在字符串中的任何地方,但你知道迪控释片是连续的,你可以使用shell参数扩展删除一切,这是不是一个数字:
$ str=used_memory:1775220696
$ num=${str//[!0-9]}
$ echo "$num"
1775220696
这工作也为used_memory:1775220696andmoretext
和123numberfirst
。但是,像abc123def456
这样的东西将变成123456
。
请注意,这也适用于任何符合POSIX标准的shell,而不仅仅是'bash'。 – chepner