我正在尝试匹配字符串开头的数字
452MATCHME
使用这个简单的正则表达式
/^\d*/
我想要这个结果,保存在变量
中452
但我无法找到获得操作结果的方法。我已阅读this tutorial,但它描述了一个数组BASH_REMATCH
,其中存储了=~
个操作的所有匹配结果。出于某种原因,在我的情况下,该数组不存在。我正在使用bash版本4.2.10(1)。
我能想到的唯一其他选项是grep
,但据我所知,这只能输出与正则表达式匹配的行。
我如何实现结果?
答案 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]
。