Reputation: 11
I have a string which has below value
String1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
I need to extract only version from this string which is "1.2.0-4"
I have tried regular expression as mentioned below with sed
sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,1\}[0-9][^.]\).*/\1/p'
but I am only getting result "1.2.0-", missing number after "-" which is 4. I tried correcting it but it is returning null.
Kindly, advise
Upvotes: 0
Views: 325
Reputation: 9926
You could also try parameter expansion:
string1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
string2=${string1%".${string1#*-*-*-*.}"}
version=${string2#*-*-}
printf "%s\n" "$version"
Upvotes: 0
Reputation: 49473
This should work, and should also account for any of the version numbers being more than one digit long.
String1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{0,2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1"
1.2.0-4
BTW, this will also match version strings like (which from your question is not clear if you want this behavior or not):
1-1
1.2-1
If you want to enforce w.x.y-z
, you could use this:
sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1"
Upvotes: 1