2013-04-15 30 views
2

我想从字符串中提取一些变量长度。从字符串中提取变量长度

的字符串看起来是这样的:

used_memory:1775220696 

我想有一个变量1775220696部分。这方面有很多问题,但我找不到适合我需求的解决方案。

回答

9

您可以使用cut

my_val=$(echo "used_memory:1775220696" | cut -d':' -f2) 

或者也awk

my_val=$(echo "used_memory:1775220696" | awk -F':' '{print $2}') 
6

使用参数扩展:

string=used_memory:1775220696 
num=${string#*:}    # Delete everything up to the first colon. 
+0

请注意,这也适用于任何符合POSIX标准的shell,而不仅仅是'bash'。 – chepner

1

可以用awk来完成,像这样:

var=`echo "used_memory:1775220696" | awk -F':' '{print $2;}'` 
echo $var 

输出:

1775220696 
2

使用正则表达式:

s/^[^:]*://g 

你SED或Perl使用它,让你需要的部分。

> echo "used_memory:1775220696" | perl -pe 's/^[^:]*://g' 
1775220696 
3

bash支持正则表达式匹配,但是对于简单的情况下这样它是矫枉过正;使用参数扩展(请参阅choroba's answer)。

为了完整起见,这里是使用正则表达式匹配的例子:

[[ $string =~ (.*):([[:digit:]]+) ]] && num=${BASH_REMATCH[2]} 
5

我用egrep的

echo used_memory:1775220696 | egrep -o [0-9]+ 

输出:

1775220696 
0

如果您数字可能在字符串中的任何地方,但你知道迪控释片是连续的,你可以使用shell参数扩展删除一切,这是不是一个数字:

$ str=used_memory:1775220696 
$ num=${str//[!0-9]} 
$ echo "$num" 
1775220696 

这工作也为used_memory:1775220696andmoretext123numberfirst。但是,像abc123def456这样的东西将变成123456

相关问题