ven*_*ter 7 command-line bash scripts regex
我写了以下脚本。稍后将在构建过程中使用它。我的目标是决定它是预发布版还是发布版。为了存档,我将 $release 与 RegEx 进行比较。如果我的 RegEx 匹配,则为预发布,否则为发布。
#/bin/bash
release="1.9.2-alpha1"
echo "$release"
if [[ "$release" =~ \d+\.\d+\.\d+[-]+.* ]];then
echo "Pre"
else
echo "Release"
fi
Run Code Online (Sandbox Code Playgroud)
但结果我总是得到以下结果:
~$ bash releasescript.sh
1.9.2-alpha1
Release
Run Code Online (Sandbox Code Playgroud)
版本:
Ubuntu 18.04.1 LTS
Run Code Online (Sandbox Code Playgroud)
我用这个编辑器来测试我的 RegEx。我被困了至少 6 小时,所以我非常感谢一些帮助。
Leo*_*Mew 12
\d而\w就在不工作的POSIX正则表达式,你可以使用[[:digit:]],虽然
#/bin/bash
release="1.9.2-alpha1"
echo "$release"
LANG=C # This needed only if script will be used in locales where digits not 0-9
if [[ "$release" =~ ^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+-+ ]];then
echo "Pre"
else
echo "Release"
fi
Run Code Online (Sandbox Code Playgroud)
我已经测试过这个脚本,它为给定的 $release 输出“Pre”
检查了您的正则表达式构建器,它仅适用于 perl 兼容和 javascript 正则表达式,而您需要 posix 或 posix 扩展。
通过@dessert:
[0-9]是更短的替代品[[:digit:]]。由于要匹配字符串的开头,因此应该添加^,而.*在末尾则是多余的:^[0-9]+\.[0-9]+\.[0-9]+-+– 使用组可以进一步缩短为:^([0-9]+\.){2}[0-9]+-+