【发布时间】:2014-08-31 20:54:04
【问题描述】:
我试图在 awk 中解析出两组不同的数字,以便我可以将它们与软件包版本进行比较,以查看是否需要完成升级或现在。
由于安装文件被标记为VMwareTools-8.6.11-1310128.tar.gz
和版本检查应用程序输出
vmware-toolbox-cmd -v
8.6.11.26309 (build-1310128)
我希望能够解析出 8.6.11 公园,例如每一个开始到最后一个时期。然后 - 到 ),应该很简单,但我一直在努力使用正则表达式。至少我认为正则表达式是实现这一目标的最佳方式。
我有这个可以去除除数字之外的所有内容,但这并不是我想要的。
echo "8.6.11.26309 (build-1310128)"| sed 's/[^0-9]*//g'
8611263091310128
您能帮忙解释一下您是如何确定要使用哪个正则表达式的吗?
【问题讨论】:
-
如果您只需要比较版本以检查是否需要更新,那么您删除除数字之外的所有内容的方法已经成功了不是吗?然后,您可以对
if(currentVersion < newVersion)进行简单比较(因为新版本的价值总是更高) - 此外,您可以在空白处停止比较,这样您就可以跳过内部版本号 -
但是,如果您有两个相同的版本号但只有内部版本号增加了怎么办。这就是为什么我想通过并使用内部版本号进行比较。
-
另外,我希望能学到更多正则表达式,它非常复杂,但非常强大。