LINUX.ORG.RU

Сообщения sis_privet

 

Перенос данных в файл

Доброе утро. В perl новичок, хотелось бы разобраться с параметрами. Есть программа , которая разделяет, заносит в хеш данные.... Вывод выходит примерно таким

  • [in]
  • 201.201.201.0/24 122.190.192.193
  • 162.198.210.0/24 122.60.194.193
  • [mslink]
  • 192.168.168.130
  • [dmz]
  • 192.192.192.192/255.255.255.192
  • 192.192.192.192.16

Так вот нужно чтобы при запуске программы с парметром к примеру dmz, данные из строк dmz выводились в отдельный файл и там бы записывались. Очень нуждаюсь в помощи бывалых

 ,

sis_privet
()

Создание именных файлов и запись данных

Добрый день! Подскажите пожалуйста по моему вопросу. Суть вот в чем. Имеется программа. Ее код;


#!/usr/bin/perl -w
 
use strict;
use FindBin;
 
my $base_dir = "$FindBin::Bin";
my $file_name = "$base_dir/source.dat";
my %interfaces;
my @current_nets;
 
open(SRC, "< $file_name") || die "Файл не найден!";
while (my $s = <SRC>) {
    chomp $s;
    next if $s =~ /^\s*$/ || $s =~ /^\s*#/;    
    # Проверяем, похожа ли строка на ключ=значение
    if ($s =~ /^(.+?)\s*=\s*(.+)$/) {
      # Да, похожа
      ParseKeyValue($1, $2);
      next;
    }
    # Вызов процедуры проверки на начало сети 
    if ($s =~ /^\[(\S+)\]/) {
      ParseNetName($1);
      next;
    }
    
}
 
close SRC;
 
exit;
 
 
# Разобрать строку ключ = значение
sub ParseKeyValue 
{
    my $key = shift;
    my $value = shift;
    # $value разобрать на кусочки
    my $if;
    my $ip;
    if ($value =~ /^([a-zA-Z\d]+)(?:\s+(\d+\.\d+\.\d+\.\d+))?/) {
    $if = $1;
        $ip = $2;
        # Вывести на экран для проверки
        print "interface = $if";
        if ($ip) { print(" ip = $ip"); }
        print "\n";
    } else {
        die "Ошибка разбора на кусочки\n";
    }
    # Кусочки занести в хеш
    $interfaces{$1} = \{if => $1, ip => $2};
}    
 
# Процедура проверки на начало сети
sub ParseNetName 
{
    my $net = shift;
    @current_nets = split(/\|/, $net);
}
 
    


Так же имеется файл с данными откуда программа берет необходимые строки и сохраняет их
Содержимое файла source_1.dat.

in = em1
out = p2p1
mslink = em2 192.168.188.12
vpn = p2p2 192.168.195.112
dmz = p2p3 192.168.166.112
mci = p2p4

[in]


201.201.201.0/24 122.190.192.193
162.198.210.0/24 122.60.194.193

[mslink]

192.168.168.130

[dmz]
192.192.192.192/255.255.255.192
192.192.192.192.16

[mci]
172.22.0.0/16 172.22.11.105

[mslink|vpn]

101.200.192.0/16

201.192.180.0/16


192.192.192.0/16

Так вот нужно дописать код так, чтобы создавался новый файл с названием имени сети и туда записывались бы те адреса что идут под именем сети. К примеру создается файл mci его содержимое 172.22.0.0/16 172.22.11.105 и т.д.

 , ,

sis_privet
()

Регулярка и хеши в perl

Вот такой вопрос на пользование регулярных выражений и хешей. Есть строка в которой указан имя интерфейса и его адрес разделенные пробелом (к примеру: em1 192.192.192.192), но может попадаться такая строка в которой адрес отсутствует, как можно такую строку разделить на две части, соответственно первая часть это имя интерфейса а вторая часть его адрес(либо пусто), и после поместить их в анонимные хеши. Для наглядности вывести результат на консоль что попало в хеш

 ,

sis_privet
()

Помогите пожалуйста с perl

Не давно начал изучать perl, в общем застрял на таком моменте. Есть файл с какими то данными, нужно написать скрипт который выводил бы строки содержащие символ «=» из данного файла.

 , ,

sis_privet
()

RSS подписка на новые темы