> Hi all, Howdy,
> > In comp.unix.shell Alan Murrell posted this clever sed > solution for removing > entries from his named.conf file using only the domain name): > > sed '/zone "domain.com" {/,/};/d' /etc/named.conf > newfile > > Instead of using actual line numbers for the range of lines > (such as "1,4") > he uses two regexes that match to them. > > How might one do this in Perl? Read in the whole file and then do a > multi-line substitution? > > Or a 'bigger' solution would be to read the lines one at a > time into a hash > structure ($domain{domain.com} for ex.), starting a new hash > key each time > one matches /^\s*zone.*/ ? This would then let one sort, do > whatever, and > write out the entire file afterwards in proper format. > > No solution needed, just wondering about approaches (small and large). Well, assuming your conf file isn't too huge, IE the size you could use File::Slurp on. use File::Slurp; my %named_conf = parse_conf(read_file("/etc/namedb/named.conf")); Now parse_conf() takes the array that read_file() returned, and similar to what you said: At a 'zone' file get domain then until it gets the }; It adds each attribute as a key and it's value as a value. So you end up with a hash like this: $named_conf{'domain.com'} => type => 'master', file => '/etc/named/master/domain.zone'; $named_conf{'domain2.net'} => type => 'slave', file => '...', masters => '1.1.1.1;2.2.2.2; Or something like that, the syntax may be bad since I'm busy but that's the idea. Although you said you simply want to remove a zone entry som that may be overkill now that I remmebere that. How about : perl -e "use File::Slurp; $n = read_file('/etc/named.conf');$n =~ s/zone \"removeme.com\".*\}\;//" HTH Dmuey > -K > > __DATA__ > zone "domain.com" { > type master; > file "domain.com"; > }; > zone "domain2.com" { > type master; > file "domain2.com"; > }; > ## -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]