【问题标题】:regex version numbers from program version information来自程序版本信息的正则表达式版本号
【发布时间】: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) 进行简单比较(因为新版本的价值总是更高) - 此外,您可以在空白处停止比较,这样您就可以跳过内部版本号
  • 但是,如果您有两个相同的版本号但只有内部版本号增加了怎么办。这就是为什么我想通过并使用内部版本号进行比较。
  • 另外,我希望能学到更多正则表达式,它非常复杂,但非常强大。

标签: regex awk


【解决方案1】:

我认为你正在尝试得到这个,

$ echo "8.6.11.26309 (build-1310128)" | sed 's/^\(.*\)\..*\(-[^)]*\).*$/\1\2/g'
8.6.11-1310128

说明:

  • ^ 行首。
  • \(.*\)\. 捕获直到最后一个点字符的所有字符。但点字符未被捕获。
  • .* 匹配任意字符零次或多次。
  • \(-[^)]*\) - 直到 - 符号。现在从- 符号到下一个) 的所有字符都被捕获并存储到另一个组中。
  • .*$ - 匹配剩余字符直到最后一个。
  • \1\2 - 仅打印捕获的字符。(即,第一组和第二组中的字符)

【讨论】:

  • 你能解释一下你是如何找出不同部分的吗?
  • @doanerock 解释了一下 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多