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
)。