Ubuntu: How do I extract the version number portion from the version string?



Question:

How do I extract the version number from string=customer-asset-tag-1.0.2.9?

Desired result:

Component= customer-asset-tag  version number=1.0.2.9  


Solution:1

There are many ways of doing this, for example:

  • bash and similar shells (see here for more info)

    $ string=customer-asset-tag-1.0.2.9  $ echo -e "Component: ${string:0:18}\nVersion: ${string:19}"  Component: customer-asset-tag  Version: 1.0.2.9  
  • awk

    $ echo $string | awk -F- -v OFS=- '{print "Component: "$1,$2,$3; print "Version: "$4}'  Component: customer-asset-tag  Version: 1.0.2.9  

    Here, we are setting awk's field delimiter to - (this is used to define fields, the 1st field is $1, the 2nd $2 etc). We are also setting the output field separator to - so it will print correctly.

  • perl

    $ echo $string | perl -ne '/(.*)-([^-]+)/; print "Component: $1\nVersion: $2"'  Component: customer-asset-tag  Version: 1.0.2.9  

    This is the most robust and general of the three approaches since it simply looks for the longest string of non - characters and saves that as the version and everything before the version until the last - and saves that as a component.


Solution:2

Use the following in terminal,

$ string=customer-asset-tag-1.0.2.9  $ ver=$(echo $string | awk -F- '{print $NF}')  $ Component=${string/-$ver/}  $ echo "version number=$ver"  version number=1.0.2.9  $ echo "Component=$Component"  Component=customer-asset-tag  

or inside a shell script,

#!/bin/bash  string=customer-asset-tag-1.0.2.9  ver=$(echo $string | awk -F- '{print $NF}')  Component=${string/-$ver/}  echo "version number=$ver"  echo "Component=$Component"  


Solution:3

To extract version number

echo "customer-asset-tag-1.0.2.9"  | sed 's/[a-z-]//g'  

Perl way of doing it

echo "customer-asset-tag-1.0.2.9"  | perl -ne  '/([a-z-]*)-([\d+.+]*)/; print "Component= $1\nVersion= $2\n"'  


Solution:4

Another awk command,

$ string=customer-asset-tag-1.0.2.9  $ echo "Component= "$(echo $string | awk '{print substr($1,1,18)}') && echo "Version number="$(echo $string | awk '{print substr($1,20)}')  Component= customer-asset-tag  Version number=1.0.2.9  

Description:

  • echo $string - displays the value assigned to variable string.

  • echo $string | awk '{print substr($1,1,18)}'

    • | - standard output was fed as input to the following command.

    • substr($1,1,18)- From the input take the first column and display only the characters starting from the position 1 to 18 to the standard output.

  • echo $string | awk '{print substr($1,20)}'

    • Display the characters starting from the 20th position in the first column from the standard input.

awk '{print substr($x,y,z)}'  

x - column number
y - starting position
z - Ending position


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »