Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Поиск текста (парсинг) в строках

Автор: M1roTVorec
Дата сообщения: 18.07.2016 11:26
Доброго дня.
Нудна помощь в написании скрипта на 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";             # полученный результат
    }
}
Автор: Mavrikii
Дата сообщения: 18.07.2016 18:17
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"; # полученный результат
}
}
}
Автор: M1roTVorec
Дата сообщения: 18.07.2016 19:56
Огромное спасибо за помощь, используя такой подход все получилось.
Автор: Mavrikii
Дата сообщения: 18.07.2016 20:19
M1roTVorec
если читаете из файла, то читать можно сразу в массив

Страницы: 1

Предыдущая тема: Рассылка писем - подставить другой IP


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.