i wrote the following script. It will be used in a build process later. My goal is to decide whether it's a pre release or a release. To archive this i compare $release to a RegEx. If my RegEx matches it's a pre release, if not it's a release.

#/bin/bash release="1.9.2-alpha1" echo "$release" if [[ "$release" =~ \d+\.\d+\.\d+[-]+.* ]];then echo "Pre" else echo "Release" fi 

But as result i always end up with the following:

~$ bash releasescript.sh 1.9.2-alpha1 Release 

Version:

Ubuntu 18.04.1 LTS 

I used this editor to test my RegEx. I'm stuck for at least 6h, so i would appreciate some help greatly.

0

1 Answer

\d and \w don't work in POSIX regular expressions, you could use [[:digit:]] though

#/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 

I have tested this script, it output "Pre" for given $release

Checked out your regex builder, it works only with perl compatible and javascript regex, while you need posix, or posix extended.

By @dessert:

[0-9] is the shorter alternative to [[:digit:]]. As the beginning of the string is to be matched, one should add ^, while .* at the end is superfluous: ^[0-9]+\.[0-9]+\.[0-9]+-+ – using a group this can be further shortened to: ^([0-9]+\.){2}[0-9]+-+

4

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy