程序版本信息中的正则表达式版本号

时间:2014-07-10 13:01:37

标签: regex awk

我试图在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

您能解释一下如何找出使用哪种正则表达式吗?

1 个答案:

答案 0 :(得分:0)

我认为你正试图解决这个问题,

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

<强>解释

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