0

问题:从一个特定来源到我们的 accumulo 实例的数据没有通过我们的搜索接口的子集返回到我们的客户端应用程序。

当我们使用搜索方法“A”时,我们会得到结果,但是当我们使用搜索方法“B”时,我们不会。

我有一种预感,方法“A”和方法“B”实际上是针对不同的表。
为了证明这一点,我需要一种方法将挂钩放入进入表的数据流中,并使用 grep 获取指示消息来源的数据。我不能以编程方式做任何事情,因为这将需要我关闭系统,这现在不是一个选择。

我从手册中看到有一个“grep”和“egrep”命令。grep 上的帮助文件说不要将它用于正则表达式,我似乎无法让 egrep 返回我知道在数据库中的记录。

示例:
交换中的记录包含行<gml:pos>23.05507 113.5268</gml:pos>。为了 egrep,我登录 accumulo shell,选择记录所在的表,然后输入以下egrep ^:pos>23.*113.*.

什么都没有回来。
我已经尝试了所有我能想到的命令变体(引用,不引用,仅搜索 23.* 等)。

我在这里想念什么?

4

2 回答 2

0

您的正则表达式不正确。你的开头^:pos意味着“匹配 :pos 开始记录的位置”

您需要将其更改为:

egrep "^.*pos>23.*113.*"

这表示“匹配从开头到 pos>23 的任意数量的任何字符,然后匹配任意数量的字符,直到我看到 113,然后匹配更多的字符”。关键是.*介于^pos

但是请注意,这将匹配任何内容pos>23。例如:

root@accumuloinstance testTable> insert "<gml:pos>23.05507 113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> insert "<gml:pos>232.05507 113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> insert "<gml:pos>232XXX113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> egrep "^.*pos>23.*113.*"
<gml:pos>23.05507 113.5268</gml:pos> : []
<gml:pos>232.05507 113.5268</gml:pos> : []
<gml:pos>232XXX113.5268</gml:pos> : []

不确切知道您在寻找什么,但您可能想尝试:

root@accumuloinstance testTable> egrep "^.*pos>23[.].* 113[.].*"
<gml:pos>23.05507 113.5268</gml:pos> : []

这将匹配 23.xxxx 113.xxxxx 所以你得到 23.something 和 113.something

如果这不能为您提供您正在寻找的结果,请尝试执行egrep ".*"如果您没有得到任何记录,那么您没有任何记录,或者您的可见性不匹配。

于 2014-06-14T01:33:28.607 回答
-1

正则表达式中的前导 ^ 似乎将 ":pos" 锚定到行首。由于该行以“

$ echo '<gml:pos>23.05507 113.5268</gml:pos>' | egrep '^:pos>23.*113.*'
$ echo '<gml:pos>23.05507 113.5268</gml:pos>' | egrep ':pos>23.*113.*'
<gml:pos>23.05507 113.5268</gml:pos>
于 2014-06-13T23:34:17.230 回答