Regex 使用grep匹配版本号

Regex 使用grep匹配版本号,regex,unix,awk,sed,grep,Regex,Unix,Awk,Sed,Grep,如果我有如下字符串:EORQ数据库补丁(2014年1月-11.2.0.4.1) 我如何匹配版本号?即,我想提取11.2.0.4.1。我希望避免使用sed和awk,因为行是任意的,将来可能会更改,因此我正在寻找与包含数字和的版本字相匹配的内容 我尝试按如下方式使用egrep:egrep-o“[0-9.]{1,}”但它返回 2014 11.2.0.4.3 谢谢 您可能可以使用: $ egrep -o "([0-9]{1,}\.)+[0-9]{1,}" file 11.2.0.4.1 ([0

如果我有如下字符串:
EORQ数据库补丁(2014年1月-11.2.0.4.1)

我如何匹配版本号?即,我想提取
11.2.0.4.1
。我希望避免使用sed和awk,因为行是任意的,将来可能会更改,因此我正在寻找与包含数字和
的版本字相匹配的内容

我尝试按如下方式使用egrep:
egrep-o“[0-9.]{1,}”
但它返回

2014

11.2.0.4.3
谢谢

您可能可以使用:

$ egrep -o "([0-9]{1,}\.)+[0-9]{1,}" file
11.2.0.4.1
  • ([0-9]{1,}\)+
    至少匹配一个
    [0-9]{1,}
    块和一个点
  • [0-9]{1,}
    匹配
    [0-9]
    的块

因此,这将匹配
XX.YY
的任何块,即
XX
任何数量的
ZZ.KK.TT.
块,依此类推。

您可以尝试Perl正则表达式:

grep -Po "(\d+\.)+\d+"

如果您知道您的行将包含一个
-
,则可以使用
cut
并提取第二个字段,即version@Bill我不能假设你到底为什么要排除sed和awk?它们是迄今为止最明显的候选工具。也许你误解了如何使用它们?发布更多的示例输入行和预期输出,就像这样的问题一样,提取您想要的总是很容易,但排除您不想要的却要困难得多。不是-P而是-E标志:)有
-E
,有
-P
,并且
-P
更强大。不幸的是,并不是所有的操作系统都支持它(而且
-o
)。