如何在Bash中执行简单的正则表达式匹配?

3
我将翻译如下:

我正在尝试匹配字符串开头的数字

452MATCHME

使用这个简单的正则表达式


结果为:匹配到的数字为452。
/^\d*/

我希望将这个结果保存在一个变量中:

452

但是我找不到获取操作结果的方法。我阅读了这篇教程,但它描述的是一个数组BASH_REMATCH,其中存储了所有匹配=~操作的结果。但是出于某种原因,该数组在我的情况下不存在。我使用的是bash版本4.2.10(1)。

我唯一能想到的另一个选项是使用grep,但是据我所知,它只能输出与正则表达式匹配的行。

我该如何实现我的结果?

3个回答

4

这将有效:

if [[ "452MATCHME" =~ ^([0-9]+).* ]]
then 
    echo ${BASH_REMATCH[1]};
fi

附言:我正在使用bash 3.0版本,只是你的正则表达式格式不正确。


2
在bash 4中,模式必须不被引用:[[ "452MATCHME" =~ ^[0-9]+ ]] && echo ${BASH_REMATCH[0]} - glenn jackman

4

3

看起来问题在于BASH正则表达式不支持\d,请改用[0-9]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接