Re: Find a line, and comment out the next 5 lines
From: mdh (stratfan_at_mindspring.com)
Date: 04/20/04
- Next message: Laszlo: "Singleton logger"
- Previous message: mdh: "Posting Credentials using LWP To WebMethods"
- In reply to: joe shaboo: "Find a line, and comment out the next 5 lines"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: 19 Apr 2004 21:24:23 -0700
After providing you the obligatory warning about automating anything
to do with DNS (smile), what you're basically try to accomplish is the
following steps:
1) examine a multiline string for the following pattern:
\nzone "YOURTARGETZONE" {\n(arbitrary characters)\n(arbitrary
characters)\n(arbitrary characters);\n(arbitrary characters)}\n
2) take the string (the entire file) and chop it into three parts:
$prematch -- the characters before the match
$thematch -- the characters matching the pattern
$postmatch - the characters after the match
3) on $thematch, use the substitution operator to replace the
newlines with "\n//"
4) join $prematch, $thematch, and $postmatch back into one string
5) write the result joined string back out as your new zone file
Try the following code snippet...
mdh
#!/usr/bin/perl
my $UID = "joeblow\@somecompany.com";
my $datestring = `date -u "+%m/%d/%Y %H:%M:%S"`;
$datestring =~ tr/\n\r//d; # delete trailing newline or carriage
return
my $targetdomain = "mydomain.com";
# define a variable using the HERE construct for simulated zone file
input..
my $sampleinput = <<"EOF";
zone "dontchangethisdomain.com" {
type master;
file "/somepath/to/dontchangethisdomain.com";
notify yes;
}
zone "mydomain.com" {
type master;
file "/path/to/zone/mydomain.com";
notify yes;
}
zone "leavethisalonetoo.com" {
type master;
file "/other/path/to/leavethisalonetoo.com";
notify yes;
}
EOF
my $prematch;
my $thematch;
my $postmatch;
# use a regular expression with "non-greedy" matching to the token
# "zone" and the closing brace character (}) to anchor on the zone
# definition matching the domain you want to comment out -- you
# want "non-greedy" matching cuz you want the shortest string that
# starts with "zone", has your target, and ends with a closing
# brace -- if you use a greedy match (.*), you'll match on the last
# brace in the file, commenting out multiple domains in error
if ($sampleinput =~ m/\n(.?)zone "$targetdomain"
\{\n(.*)type(.*);\n(.*)file(.*);\n(.*)notify(.*);\n(.?)\}/is) {
$prematch = $`;
$thematch = $&;
$postmatch = $';
$thematch =~ s/\n/\n\/\//g; # globally replace newlines with
newline and //
print "$prematch\n";
print "//domain taken out of named.conf at request of Customer by
$UID, $datestring";
print "$thematch";
print "$postmatch\n";
}
exit;
- Next message: Laszlo: "Singleton logger"
- Previous message: mdh: "Posting Credentials using LWP To WebMethods"
- In reply to: joe shaboo: "Find a line, and comment out the next 5 lines"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|