从字符串中提取可变长度的数量

时间:2013-04-15 12:50:35

标签: regex bash

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

字符串如下所示:

used_memory:1775220696

我想将1775220696部分放在变量中。关于这一点有很多问题,但我找不到适合我需求的解决方案。

7 个答案:

答案 0 :(得分:9)

您可以使用cut

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

awk

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

答案 1 :(得分:6)

使用参数扩展:

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

答案 2 :(得分:5)

我曾经使用过egrep

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

<强>输出:

1775220696

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

使用正则表达式:

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

您可以使用sed或perl来获取所需的部分。

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

答案 5 :(得分:1)

可以使用awk完成,如下所示:

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

<强>输出:

1775220696

答案 6 :(得分:0)

如果您的号码可以在字符串中的任何位置,但您知道数字是连续的,则可以使用shell参数扩展来删除不是数字的所有内容:

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

这适用于used_memory:1775220696andmoretext123numberfirst。但是,abc123def456之类的内容会变为123456