【问题标题】:Grep --byte-offset not returning the offset (Grep version 2.5.1)Grep --byte-offset 不返回偏移量(Grep 版本 2.5.1)
【发布时间】:2013-09-14 14:19:01
【问题描述】:

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
  • 如果可以为您解决问题,您为什么不升级到 2.14?我不太确定您期望的答案是什么。
  • 奇怪的是,我有一个带有 grep 2.5.1 的 RHEL 5.7 系统,它显示了这个问题。但是,使用默认配置构建的最新 2.15 tar-ball 也重现了同样的问题。然后,如果我移动到最近的 Ubuntu 系统(安装 2.6.3 grep 工作正常)并在那里编译 2.15 源,它工作正常。这似乎消除了可能的配置细节。我想知道我在这里看到的是否还有其他依赖于平台的效果。

标签: bash grep offset


【解决方案1】:

这是 grep 中的一个错误,因为其 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)。

【讨论】:

  • 我在 RHEL 5.7 上使用 grep 2.5.1 并尝试了最新的 2.15 tar-ball。也得到了复制品(有关更多详细信息,请参阅我在问题中的评论)。
  • +1 谢谢你的回答——节省了我很多时间让我的头撞到墙上。这是 OS X 的一个特殊问题,它具有 BSD grep 2.5.1 并且至少从版本 10.8 开始就有。我能够在这个答案的帮助下解决它:unix.stackexchange.com/a/122945/99697
猜你喜欢
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2016-09-05
相关资源
最近更新 更多