Накопленное регулярное выражение на примере egrep

Проблема: данные из одного конкретного источника в наш экземпляр накопления не возвращаются нашему клиентскому приложению через подмножество наших поисковых интерфейсов.

Когда мы используем метод поиска "A", мы получаем результаты, но когда мы используем метод поиска "B", мы не получаем.

Я догадываюсь, что метод "A" и метод "B" на самом деле бьют по разным таблицам.
Чтобы доказать это, мне нужен способ поместить хук в поток данных, поступающих в таблицы, и grep для данных, указывающих источник сообщения. Я не могу ничего сделать программно, потому что это потребовало бы моего отказа от системы, что сейчас не вариант.

Из руководства видно, что есть команды "grep" и "egrep". Файл справки на grep говорит, что он не должен использоваться для регулярных выражений, и я не могу получить egrep, чтобы вернуть запись, которую я знаю, которая находится в базе данных.

пример:
Запись в бирже содержит строку <gml:pos>23.05507 113.5268</gml:pos>, Чтобы egrep для него, я захожу в оболочку накопителя, выбираю таблицу, в которой существует запись, а затем введите следующее egrep ^:pos>23.*113.*,

Ничего не возвращается
Я перепробовал все варианты команды, которые мог придумать (цитирование, а не цитирование, поиск только 23.* и т. Д.).

Что мне здесь не хватает?

2 ответа

Ваше регулярное выражение неверно. Ваше начинается с ^: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 и кое-что.

Если это не дает того результата, который вы ищете, попробуйте сделать egrep ".*" Если вы не получили никаких записей назад, либо у вас их нет, либо ваши видимости не совпадают.

Кажется, что ведущий ^ в вашем регулярном выражении привязывает ":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>
Другие вопросы по тегам