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

时间:2011-08-26 10:57:34

标签: regex bash

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

  

452MATCHME

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

/^\d*/

我想要这个结果,保存在变量

  

452

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

我能想到的唯一其他选项是grep,但据我所知,这只能输出与正则表达式匹配的行。

我如何实现结果?

3 个答案:

答案 0 :(得分:4)

var=452MATCHME
echo ${var%%[^0-9]*}

这将从第一个非数字删除到结尾。

对于大多数情况,Bash参数已足够,所以我建议您熟悉它。这是bash模式的链接: http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching

答案 1 :(得分:4)

这将有效:

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

P.S:我正在使用bash 3.0版本,它只是你的正则表达式没有很好的形成。

答案 2 :(得分:2)

所以看来问题是BASH正则表达式不支持\d。请改用[0-9]