Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проблема с регуляркой (Perl)

Ответить
Настройки темы
Любой язык - Проблема с регуляркой (Perl)

Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день.
Есть скрипт на Perl'e, которым я собираю инфу с машины. Столкнулся с проблемой при разборе файла /etc/hosts, а именно с регуляркой которая будет выцеплять нужный мне IP.
Файл hosts примерно выглядит так:
Код: Выделить весь код
10.10.10.101    msk-pc-101-rv1.dome.name    msk-rv-101-rv1 
10.10.10.102    msk-pc-102-rbc1.dome.name    msk-rbc-102-rv1
10.10.10.103    msk-pc-103-rp1.dome.name    msk-rp1-103-rv1
10.10.10.104    msk-pc-104-rv1.dome.name    msk-rv1-104-rv1
Меня интересуют IP который имеет часть имени bc1, оно иногда может быть BC1, DCBC1, dcbc1. Вообщем суть такая что нужно выгребать IP в строке где есть bc[0-9] или BC[0-9].
Побывал с начало egrep

Вот часть скрипта которая не работает:
Код: Выделить весь код
unless(`cat /etc/hosts` =~ m/ (10\.[0-9]+\.[0-9]+\.[0-9]+)\[ +]\[a-zA-Z0-9]+\-\[a-zA-Z]+\-\[bc1]/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка получения IP BC' ); die; }
my $bc1 = $1;
Побывал сначало egrep делать, что бы оставалась только одна строка, запихивал её в unless, но при попытке вырвать IP все равно давал ошибку...

Есть идеи что можно сделать?

P.S. регулятора которая в данный момент в скрипте 100 раз видоизмененная, может показаться полным бредом .

Отправлено: 09:16, 29-01-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=.*bc\d)

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:19, 29-01-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


https://regex101.com/r/4mLUCx/2 (флаг g для наглядности). Подмасок нет, будет $&.

Последний раз редактировалось Sham, 29-01-2020 в 15:14. Причина: $&

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:22, 29-01-2020 | #3


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да спасибо, обе регулярки отрабатывают корректно.
Но эта часть скрипта почему то, не отрабатывает.
Вот в этом же скрипте, данная часть отрабатывает корректно:
Код: Выделить весь код
unless(`ifconfig` =~ m/inet (10\.[0-9]+\.[0-9]+\.[0-9]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка получения IP адреса' ); }
my $ip_addr = $1;
А вот с этим беда:
Код: Выделить весь код
unless (`cat /etc/hosts` =~ m/ ^10\.\d+\.\d+\.\d+(?=\h+\V+?bс[0-9]+)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка получения IP БС' );}
my $bog1 = $1;
что может быть не так?

Последний раз редактировалось Armsinglom, 29-01-2020 в 14:30.


Отправлено: 13:54, 29-01-2020 | #4


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


При таком варианте возвращает пустату, но ошибки нет
Код: Выделить весь код
unless (`cat /etc/hosts` =~ m/ \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=.*bc\d)/) {
  console( COLOR => 'red', MESSAGE => 'Ошибка получения IP БС' );}
my $bog1 = $1;

Отправлено: 14:44, 29-01-2020 | #5


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


https://rextester.com/UOWM34553 Один IP нужен или все?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:13, 29-01-2020 | #6


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вообщем один, а как он себя будет вести если вдруг 2 найдет?

Отправлено: 15:33, 29-01-2020 | #7


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


для мультипоиска нужен массив и флаг g
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:20, 29-01-2020 | #8


Пользователь


Сообщения: 51
Благодарности: 0

Профиль | Отправить PM | Цитировать


я не знаю почему, но заработало только после того как я добавил в:
Код: Выделить весь код
'cat /etc/hosts | egrep '?bc[0-9]+|?BC[0-9]+'
И моя и ваши регулярки стали прекрасно вытягивать IP.

Последний раз редактировалось Armsinglom, 29-01-2020 в 23:35.


Отправлено: 22:28, 29-01-2020 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Можно, наверное, даже так:
Код: Выделить весь код
egrep '?bc[0-9]+|?BC[0-9]+' /etc/hosts

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:42, 30-01-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проблема с регуляркой (Perl)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Java - Проблема с регуляркой blackeangel Программирование и базы данных 1 15-06-2017 20:30
perl simon171078 Вебмастеру 2 08-09-2006 19:44
FreeBSD 5.3 Perl не видит локали, а KDE при сборке не видит perl :o mar Общий по FreeBSD 8 06-05-2005 13:13
Perl Patrick Программирование и базы данных 3 02-06-2004 23:27
Perl Guest Программирование и базы данных 2 08-03-2004 23:00




 
Переход