如何将数字与grep匹配

时间:2012-06-11 10:01:13

标签: regex cygwin grep

我的日志文件中有一行,其中包含有问题的版本号。 它总是1.43.93。*例如

<some text > Version=1.43.98.7488, <more text>

我只是想取消版本号。

以下任何一项都不会返回任何内容:

grep -G -m 1 1.43.98\.\d+ mylog.txt
egrep -m 1 "1.43.98\.\d+" mylog.txt

构建号出现在日志文件的多个位置(这就是我传递-m标志值为1的原因),但显然我只对第一个匹配感兴趣。

任何提示将不胜感激。我正在使用Cygwin(GNU grep 2.6.3)。

由于

3 个答案:

答案 0 :(得分:4)

首先确保\d有效 - 您可能必须设置-P选项(perl regex)并针对简单的事情进行测试。

我花了很多时间想知道为什么我的正则表达式在一个平台上工作而不是另一个只发现一台机器上的grep在没有启用-P选项的情况下构建。所有\d正则表达式都被忽略了,我不得不使用[:digit:][0-9]代替:(

答案 1 :(得分:2)

grep -o -m 1 1.43.98.[[:digit:]]* a

答案 2 :(得分:1)

我没有cygwin env。以下grep行在linux下测试过。

kent$  cat a
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>

kent$  grep -oPm 1 '(?<=Version=)[0-9\.]+(?=,)' a
1.43.98.7488


kent$  grep -V
GNU grep 2.5.3