Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Regex 从字符串中提取可变长度的数目_Regex_Bash - Fatal编程技术网

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

Regex 从字符串中提取可变长度的数目,regex,bash,Regex,Bash,我想从字符串中提取一些可变长度 字符串如下所示: used_memory:1775220696 var=`echo "used_memory:1775220696" | awk -F':' '{print $2;}'` echo $var 我希望变量中包含1775220696部分。这方面有很多问题,但我找不到适合我需要的解决方案。您可以使用cut: my_val=$(echo "used_memory:1775220696" | cut -d':' -f2) 或者也awk: my_val

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

字符串如下所示:

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

我希望变量中包含
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完成,如下所示:

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

1775220696
1775220696
使用正则表达式:

s/^[^:]*://g
您可以将它与sed或perl一起使用,并获得所需的部分

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

bash
支持正则表达式匹配,但对于这样一个简单的情况来说,这太过分了;使用参数展开(请参见)

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

[[ $string =~ (.*):([[:digit:]]+) ]] && num=${BASH_REMATCH[2]}
我以前用白鹭

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

1775220696
1775220696

如果您的数字可以位于字符串中的任何位置,但您知道这些数字是连续的,则可以使用shell参数展开删除所有非数字的内容:

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

这也适用于
已用内存:1775220696和更多文本
123numberfirst
。但是,类似于
abc123def456
的内容将变成
123456

请注意,这也适用于任何兼容POSIX的shell,而不仅仅是
bash