2013-08-12 3 views
0

Я хотел бы GREP что-то между двумя строками/символами без использования -P (PERL) только с -E (--extended-regexp).GREP между двумя строками без PERL

Я знаю, как это сделать с awk, sed и grep -Po, это не вопрос. Я спрашиваю, возможно ли это сделать только с grep -E. Вот пример между ( и ):

Пример:

echo "My IP=(192.168.0.1):205 bla bla" | grep -oE '\(\b.*\b\)' 

Это один работает, но я получаю результат с ( и ).

+0

возможного дубликата [Grep и печати обратно ссылка] (http://stackoverflow.com/questions/15067796/grep-and-print-back-reference) –

+0

Я не думаю, что только 'grep -E' может получить вам этот вывод. – anubhava

+0

Без lookahead/задержек у него получается, чтобы сбрасывать эти '()' 's .... – Wrikken

ответ

0

Учитывая, что в тексте примера текст между паранами выглядит как IP-адрес, а остальная часть текста не содержит того, что похоже на ip-адрес, вы можете просто опустить параны и искать IP-адреса ,

Это выражение будет соответствовать строки, которые выглядят как IP-адрес, а также пределы октет на числовые значения от 0 до 255.

(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])

enter image description here

[email protected]:~# echo "My IP=(192.168.0.1):205 bla bla" | grep -oE '(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])' 
192.168.0.1 
[email protected]:~# 
+0

Впечатляющий :), но я думаю, что это не то, что я просил - совпадение между строкой/символом, не совпадающим с IP-адресом. Это просто пример того, что внутри есть что-то. – mike

+0

Да, опции -oE ограничивают использование внешнего вида, что ограничивает ваши варианты :( –

Смежные вопросы