Grep --byte-offset未返回偏移量(Grep版本2.5.1)

6

Grep --byte-offset在返回偏移量时存在问题 (Grep版本2.5.1) 您好, 我正在尝试使用代码在一行中获取重复字符串的位置:

代码:

grep -b -o "pattern"

在我的服务器上,我使用的是GNU grep 2.14版本,代码运行正常。然而,当我将相同的代码部署到不同的服务器上时,该服务器使用的是GNU grep 2.5.1版本,代码无法正常工作。即使有字节偏移选项也是如此。有什么想法可以解决这个问题吗。
示例:
代码:
export string="abc cat mat rat cat bat cat fat rat tat tat cat"
echo $string|grep -b -o "cat"

期望输出结果(仅在grep 2.14中支持):

4:cat
16:cat
24:cat
44:cat

但是相同的代码在grep版本2.5.1中会输出以下内容:
0:cat
cat
cat
cat

请提供建议...

你是否尝试过使用更详细的选项 --byte-offset 进行测试? - lurker
1
为什么不升级到2.14版本,如果这可以解决你的问题?我不太确定你在这里期望得到什么样的答案。 - Mat
有趣的是,我有一个带有grep 2.5.1的RHEL 5.7系统,它显示出这个问题。但是,最新的2.15 tar-ball使用默认配置构建也会产生相同的问题。然后,如果我转移到最近的Ubuntu系统(安装了2.6.3 grep可以正常工作)并在那里编译2.15源代码,它可以正常工作。这似乎消除了可能的配置细节。我想知道我是否在这里看到其他平台相关的影响。 - nik
1个回答

5

grep中存在一个bug,它的Changelog中有一些笔记提到了它:

    * src/grep.c (nlscan): Make this function more robust by removing
      the undocumented assumption that its "lim" argument points
      right after a line boundary.  This will be used later to fix
      --byte-offset's broken behavior.  Patch #3769.
请使用后续版本(至少2.5.3),在这些版本中此问题似乎已得到修复。

我在一个安装有grep 2.5.1的RHEL 5.7上遇到了这个问题,并尝试使用最新的2.15 tar-ball进行复现。我在问题的评论中提供了更多细节。 - nik
+1 感谢您的回答 - 省去了我在墙上撞头的很多时间。这是OS X的一个特殊问题,它有BSD grep 2.5.1,并且至少从10.8版本开始就一直存在。在这个答案的帮助下,我能够解决它:http://unix.stackexchange.com/a/122945/99697 - Ivan X

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接