Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Поиск текста (парсинг) в строках

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

M1roTVorec

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго дня.  
Нудна помощь в написании скрипта на perl. Уже третий день бюсь над небольшим куском кода и не могу понять где допускаю ошибку. Перечитал все мануалы и вроде написал все правильно, вот только результат совсем не тот который должен получиться.
 
У меня есть файл в котором записано куча строк со значениями. Мне нужно найти все значения которые записаны после текстового тега target. Чтобы на выходе был результат:
 

Цитата:
cpu1
temp_1
vlan16
ping
и так далее

 
Ниже привожу пример написанного кода который не хочет работать:
 

Код:
#!/usr/local/avalon/bin/perl
#use strict;
#use warnings;
 
my $string = "target    --default--
    probe-vnc        = false
    probe-vnc        = false
 
target    cpu1
    link-target        = /Devices/Computers/Win2000/10.76.144.251/cpu1
 
target    temp_1
    link-target        = /Devices/Switches/IOS/10.100.16.12/temp_1
 
target    vlan16
    link-target        = /Devices/Interfaces/10.100.16.12/vlan16
 
target    ping
    link-target        = /Devices/Services/10.100.16.12/ping";
 
if ($string =~ m/(^target)/i) {
    
    $test1 = $';  #возвращаю строку после искомого текста
 
    $test1 =~ s/^\s+//;        #убираю пустоты
    $test1 =~ s/\s+$//;        #убираю пустоты
 
    if ($test1 =~ m/(^--default--)/i){    #значение default пропускаю
        print "No", "\n"
    } else {
        print $test1, "\n";             # полученный результат
    }
}

 
Может кто подскажет где ошибка.

Всего записей: 2 | Зарегистр. 03-01-2016 | Отправлено: 11:26 18-07-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
M1roTVorec
это больше сюда
Perl - Регулярные выражения / Regexpы
 

Цитата:
Может кто подскажет где ошибка.

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

Код:
foreach $line (split /^/m, $string) {
    if ($line =~ m/(^target)/i) {  
         
        $test1 = $';  #возвращаю строку после искомого текста  
 
        $test1 =~ s/^\s+//;        #убираю пустоты  
        $test1 =~ s/\s+$//;        #убираю пустоты  
     
        if ($test1 =~ m/(^--default--)/i){    #значение default пропускаю  
#            print "No", "\n"  
        } else {  
            print $test1, "\n";             # полученный результат  
        }  
    }
}

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 18:17 18-07-2016
M1roTVorec

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромное спасибо за помощь, используя такой подход все получилось.

Всего записей: 2 | Зарегистр. 03-01-2016 | Отправлено: 19:56 18-07-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
M1roTVorec
если читаете из файла, то читать можно сразу в массив

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 20:19 18-07-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Поиск текста (парсинг) в строках


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru