2013-03-26 80 views
2

我有这样的:提取版本号子串

Product Name   Product Version  
==================== ==================== 
vmware-workstation 9.0.2.1031769 

我可以用得到vmware-workstation部分:

$ vmware-installer -l | grep -Po "(?=v)[^ ]*(?=)" 

如何获得的版本号部分(不包括构建,这意味着刚刚9.0.2 )?

+0

'(\ d + \。)+ \ d +'然后只使用捕获组? – Patashu 2013-03-26 00:27:43

回答

1

使用grep做的另一种方式:

vmware-installer -l | grep -Po "(\d+\.){2}\d+"

+0

我们有一个赢家。 – Det 2013-03-26 12:13:27

+0

真正的获胜者在不需要时不使用捕获组 – 2013-03-26 13:31:51

+1

@sputnick,为什么你会这么不高兴?这只是稍微简单一点,在这种特殊情况下工作,哈哈。 – Det 2013-03-26 13:40:59

1
$ vmware-installer -l | grep -Po "^v\S+\s+\K\d+\.\d+\.\d+" 
9.0.2 

$ vmware-installer -l | grep -Po "(?:\d+\.){2}\d+" 
9.0.2 

这样的:没有必要

(?:) 

避免捕获组

1

随着SED:

vmware-installer -l | sed -n 's/[^ ]* *\(.*\)\.[0-9]*/\1/p'