如何从linux中的单个命令行中提取版本?

时间:2011-10-05 12:32:12

标签: linux shell

我的产品有一个名为db2level的命令,其输出在

下面

enter image description here

我需要从中提取8.1.1.64,到目前为止,我想出来了,

db2level | grep "DB2 v" | awk '{print$5}'

给了我一个输出v8.1.1.64",

请帮我提取8.1.1.64。感谢

8 个答案:

答案 0 :(得分:3)

grep足以做到这一点:

db2level| grep -oP '(?<="DB2 v)[\d.]+(?=", )'

答案 1 :(得分:3)

只是用awk:

db2level | awk -F '"' '$2 ~ /^DB2 v/ {print substr($2,6)}'

答案 2 :(得分:2)

db2level | grep "DB2 v" | awk '{print$5}' | sed 's/[^0-9\.]//g'

删除所有数字和点

答案 3 :(得分:2)

sed是您进行常规提取任务的朋友:

db2level | sed -n -e 's/.*tokens are "DB2 v\([0-9.]*\)".*/\1/p'

sed行不会打印任何行(-n),而是可以发生替换给定正则表达式的行。行的开头和结尾的。*确保整行匹配。

答案 4 :(得分:2)

使用-o选项尝试 grep

db2level | grep -E -o "[0-9]+\.[0-9]+\.[0-9]\+[0-9]+"

答案 5 :(得分:2)

另一个sed解决方案

db2level | sed -n -e '/v[0-9]/{s/.*DB2 v//;s/".*//;p}'

这个不依赖于特定格式的数字,只是在输出的特定位置。

答案 6 :(得分:1)

尝试s.th.比如db2level | grep "DB2 v" | cut -d'"' -f2 | cut -d'v' -f2

cut将输入分成几部分,用分隔符-d分隔并输出字段编号-f

答案 7 :(得分:1)

db2level | grep -o "v[0-9.]*" | tr -d v