I have a file with following content:
some text
some text
Implementation-Version: 1.1.1
some text
When I use:
grep Implementation-Version filename
so my output is Implementation-Version: 1.1.1
How can I get only the Version number 1.1.1?
I have a file with following content:
some text
some text
Implementation-Version: 1.1.1
some text
When I use:
grep Implementation-Version filename
so my output is Implementation-Version: 1.1.1
How can I get only the Version number 1.1.1?
You can use awk like that:
grep Implementation-Version filename | awk -v FS=': ' '{print $NF}'
Or, without using grep at all:
awk '$1=="Implementation-Version:" {print $2}' filename
With GNU grep:
grep -Po 'Implementation-Version: \K.*' file
or
grep -Po '(?<=Implementation-Version: ).*' file
Output:
1.1.1
See: man grep and The Stack Overflow Regular Expressions FAQ
With sed
sed '/Implementation-Version: /!d;s///' file
Another sed variation would be:
sed -n 's/^Implementation-Version:\s*//p' file
Where the normal substitution form 's/find/replace/' is used along with the -n option to suppress normal printing of pattern space and p following the substitution to output after a successful substitution.
The find part anchor "Implementation-Version:" to the beginning of the line with the circumflex character '^'. The \s+ matches zero-or-more whitespace characters that follow. Then on a successful match, the content is replaced with nothing, effectively trimming the beginning of the line though the final space leaving your desired output.
Example Use/Output
With your example text in the file named content, you would have:
$ sed -n 's/^Implementation-Version:\s*//p' content
1.1.1
Look things over and let me know if you have questions.
With default grep and cut:
grep Implementation-Version file | cut -d " " -f2
Or with a line of awk:
awk '{ if ($1 == "Implementation-Version:") print $2 }' file
Output:
1.1.1