2017-02-18 10 views
0

Я пытаюсь извлечь IP-адрес из текста и не понимаю результат в соответствии с регулярным выражением, которое я пишу. Apparantly это:Sed выражение для IP-адреса, получение неожиданного результата для соответствующей группы

echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "(.*)"/\1/p' 

возвращает

173.14.0.3, 

Почему я получаю , в конце? Не "(.*)" инструктировать регулярное выражение для создания соответствующей группы из всех двух последних "?

Первоначально я начал с

echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})"/\1/p' 

, но получил тот же результат. Я использовал regex101, и там я получаю другой ответ. Зачем?

+0

regex101 не поддерживает регулярные выражения sed. Вы не можете использовать его для sed. – hek2mgl

+0

Является ли вход json-документом? – hek2mgl

+0

@ hek2mgl Да, но меня больше интересует, как работает sed. Я знаю, что есть лучшие способы разбора json. – erihanse

ответ

2

Ваш вход:

input:   "IPAddress": "173.14.0.3", 
matched by regex: ^^^^^^^^^^^^^^^^^^^^^^^^^ (note: comma not matched) 
captured:      ^^^^^^^^^^ 

Найденная часть заменяется на захваченной подстроки и заменил обратно в исходную строку, уступая:

result:  173.14.0.3, 
not affected:   ^
replacement: ^^^^^^^^^^ 

Если вы хотите избавиться от запятой, включите его в игру (так что он заменяется ничем):

s/"IPAddress": "(.*)",/\1/p 

regex101 s хау такое же поведение: https://regex101.com/r/Fy5Lj3/4

+0

Даже если в этом случае он выглядит одинаково, regex101 не поддерживает регулярное выражение posix и не может использоваться как ссылка – hek2mgl

+0

@ hek2mgl Не в общем, правильно. Но в этом случае это просто '. *', И поведение такое же. – melpomene

+0

Это все еще * очень * вводит в заблуждение, если вы дадите это новичкам. Вы должны были объяснить это, поскольку вы видите, что ОП этого не знает. – hek2mgl

0

Общие рекомендации: regex101.com делает поддержку не регулярные языки выражения, поддерживаемые sed. Они объясняются в спецификации POSIX.

В то время как простые вещи могут похожи, выражения значительно отличаются. Do не использовать regex101 при работе с регулярными выражениями для sed.

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/15257373) –

+0

Я не согласен с этим в этом специальном случае. – hek2mgl

+0

Заданный вопрос: «Почему я получаю в конце?» _ Использование regex101.com является касательным к вопросу, поэтому ваш «ответ» должен был быть комментарием. –