Guys, in todays post we'll look into an example where we want to extract version number from pom.xml of a Maven based project. In other words, all we have to do is extract text between 2 strings from a file. Quite obviously we would use sed for that. But let's look into a scenario where you have to pipe sed to other unix commands.
FYI this will work universally on Linux/Unix/Mac OS X flavors.
Let's say I have a pom.xml file of a Maven based project and I want to display only the version number from it. As you may be aware, we define the version number within the <version> </version> tags.
For e.g. my pom.xml looks something like this :
Here we want to extract only the version number from the file. i.e in this case I only want to display 1.0-SNAPSHOT.
Did you notice that in our file we have two lines of the <version></version> tags. One for our main project version and the other is for the dependency version. Now if we use sed to extract text between the "version" words, it will give output like this below.
So let's display only the topmost line with head -1. That should help narrow down our output.
Now all we need is to extract the version number. Let's cut the output characters as follows :
Cheers guys! That's what we wanted right? Now we could perhaps develop a script around this. Maybe have a variable which stores this version number. Perhaps we could use this variable for some conditional checks. Something like this :
Output :
The possibilities are limitless! Until next time, ciao!
FYI this will work universally on Linux/Unix/Mac OS X flavors.
Let's say I have a pom.xml file of a Maven based project and I want to display only the version number from it. As you may be aware, we define the version number within the <version> </version> tags.
For e.g. my pom.xml looks something like this :
Here we want to extract only the version number from the file. i.e in this case I only want to display 1.0-SNAPSHOT.
Did you notice that in our file we have two lines of the <version></version> tags. One for our main project version and the other is for the dependency version. Now if we use sed to extract text between the "version" words, it will give output like this below.
sed -n '/version/,/version/p' pom.xml
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>testapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
sed -n '/version/,/version/p' pom.xml | head -1
<version>1.0-SNAPSHOT</version>
sed -n '/version/,/version/p' pom.xml | head -1 | cut -c 12-23
1.0-SNAPSHOT
#!/bin/bash
# Program to extract version number from the pom.xml
i=`sed -n '/version/,/version/p' /Users/ironcladzone/workspace/MavenTest/testapp/pom.xml | head -1 | cut -c 12-23`
echo $i
if [ $i = "1.0-SNAPSHOT" ]; then
echo "Version 1.0 Development copy. Team A is working on it."
else
echo "That's not a Version 1.0 Dev copy"
fi
Output :
./ExtractVersionFromPom.sh
1.0-SNAPSHOT
Version 1.0 Development copy. Team A is working on it.
you can also try in very simple way..
ReplyDeletecat pom.xml | grep "version" | sed -e 's/version//g' | tr -d '<>/' | grep ^[0-9]
Thanks for your comments. Appreciate it. Cheers!
ReplyDelete