Grep: как исправить регулярку с просмотром вперед?
Есть такая регулярка: " [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=\/[0-9]{1,2}) " для получения ип адреса после которого стоит префикс подсети.
При ее использовании " ip route show | grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=\/[0-9]{1,2})" " по какой-то причине ничего не находится, хотя на сайте тестирования регулярок, эта регулярка работает.
Если убрать (?=\/[0-9]{1,2}) то регулярка начинает срабатывать.
Как сделать чтобы сработала регулярка " [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=\/[0-9]{1,2}) " ?
Вам нужен не ERE (grep -E) режим, а PCRE (grep -P).
В обычном (даже расширенном) режиме grep не умеет lookarounds и многое другое www.regular-expressions.info/refadv.html
Руслан Федосеев: она так же получает ипы которые стоят без префикса, только сейчас понял что пример не совсем удачный если в строке находятся 2 адреса то будут матчится оба "10.0.0.11 10.0.0.12/32" а нужен только " 10.0.0.12 "