2

我的日志文件中有一行包含相关构建的版本号。它永远是 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

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

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

谢谢

4

3 回答 3

5

首先确保它\d有效 - 您可能必须设置 -P 选项(perl 正则表达式)并针对简单的东西进行测试。

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

于 2012-06-11T10:33:44.770 回答
2
grep -o -m 1 1.43.98.[[:digit:]]* a
于 2012-06-11T10:32:43.977 回答
1

我没有 cygwin 环境。以下 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
于 2012-06-11T10:19:01.833 回答