Perl

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • regex and parsing config file directives..

    0 answers - 4109 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Hello,
    Follow the conditions,the resolving way is not so complicated as yours.I
    would give my sample way,hope it's useful to you.
    here is the config file's content:
    $ cat config.txt
    ;test file
    # comment lines
    IP = 1.2.3.4
    PRT = 80
    PREFRK_CHILDS = 5
    MIN_SPARE_CHILDS
    here is the sample script:
    $ cat test.pl
    use strict;
    use Data::Dumper;
    my %hash;
    open HD,"config.txt" or die $!;
    while(<HD>){
    next if /^\s*#|^\s*;/;
    next if /^\s*$/;
    my ($key,$value) = split/=/;
    $key =~ s/^\s+|\s+$//g;
    $value =~ s/^\s+|\s+$//g;
    $hash{$key} = $value || 'nodefined';
    }
    close HD;
    print Dumper \%hash;
    __END__
    Run it and get the result output:
    $ perl test.pl
    $VAR1 = {
    'PREFRK_CHILDS' ='5',
    'IP' ='1.2.3.4',
    'MIN_SPARE_CHILDS' ='nodefined',
    'PRT' ='80'
    };

    >From: "Gregory Machin" <gregory.machin (AT) gmail (DOT) com>
    >To: beginners (AT) perl (DOT) org
    >Subject: regex and parsing config file directives
    >Date: Fri, 14 Jul 2006 11:18:40 +0200
    >
    >Hi.
    >Sorry to bother but I can't get this script to work
    >It is supposed to parse the openvpn config,
    >1) any line starting with a ";" is to be ignored
    >2) all directives are written to a hash where the key is the directive and
    >the value is the value of the directive .
    >3) if the directive is present but no value is set then the key must be set
    >to the directive and the value must be set to "defined" or the same value
    >as
    >the key
    >
    >this is the script so far
    >
    >
    >#!/usr/bin/perl
    >#
    >
    >use strict;
    >
    ># vars
    >my @tmp_load_file;
    >my @tmp_directive;
    >my %directive;
    >#
    >sub get_config_file {
    >my $line; #used in while for outputing each line.
    >print "opening config file for processing\n\n";
    >open(IN, "< /etc/openvpn/client.conf");
    >
    >while (<IN>){
    >

    if (( $_ =~ /^#/ ) || ( $_ =~ /^\ /) || ( $_ =~ /^\n/) ){
    } else {
    chomp; push(@tmp_directive , $_ );
    }
    >}
    >
    >close (IN);
    >}
    >
    >get_config_file;
    >
    >
    >
    >sub config_hash {

    regex used in the function
    ## /.+\s(.+) used to find the option set for that directive. "dev
    >tun" will return "tun"

    my $value ;
    >foreach (@tmp_directive) {

    #print "$_"; if ( $_ != /^\;/) {
    } else {
    /^([\w|-]+)\s(.+)/ ;
    print " $1 =$2 \n";
    $directive{$1} = $2 ;
    } if ( $_ != /^\;/) {
    } else {
    /^([\w|-]+)\n/ ;
    #print ">$1 =$1 \n";
    #$value = "1" unless $2;
    $directive{$1} = $1 ;
    } }
    >}
    >
    >
    >config_hash ;
    >
    >my $key; my $value;#
    >
    >print "\n\n";
    >for $key (keys %directive){

    $value = $directive{$key};
    print "$key =$value\n";
    >}
    >
    >this it the output
    >[greg@greg openvpn]$ perl passconfig.pl
    >opening config file for processing
    >


    >dev =tun0
    >proto =tcp
    >remote =192.168.1.1 1194
    >resolv-retry =infinite


    >ca =ca.crt
    >cert =greg.crt
    >key =greg.key
    >cipher =AES-128-CBC


    >verb =3


    >proto =tcp
    >cert =greg.crt
    >dev =tun0
    >ca =ca.crt
    >key =greg.key
    >remote =192.168.1.1 1194
    >verb =3
    >cipher =AES-128-CBC
    >resolv-retry =infinite
    >
    >
    >
    >Many Thanks
    >Greg
    >
    >
    >


    >Gregory Machin
    >gregory.machin (AT) gmail (DOT) com
    >www.linuxpro.co.za

Re: regex and parsing config file directives..


max 4000 letters.
Your nickname that display:
In order to stop the spam: 1 + 0 =
QUESTION ON "Perl"

EMSDN.COM