On Tuesday 15 October 2002 10:10 pm, Bret is done writ:
> when I ran the code I sent using sub(oldip,newip) as you suggest,
> without the $ end of line placeholder, it changed addresses like
> 192.168.0.131 to 192.168.0.1231. I will run run your code but assuming
> that it works, wy does it and mine did not? Is there some magic in
> gsub?
Nope. I was jes' makin' sure...that any and all instances on a given line
were changed.
Ok, found the problems, which was a *lot* easier once I had the data you were
working with, and not some that I made up (I don't run DNS, since my SOHO is
all of 4 machines, so I use assigned IPs in /etc/hosts). For example, I
copied from a sample I googled, and it had a different format, with a ";" as
the next field on the line after the serial number. This code will
*guarantee* that this puppy will get it right, regardless of the format.
BEGIN {
oldip="192.168.0.13";
oldiplen = length(oldip);
newip="192.168.0.123";
}
{
if ($0 ~ /SOA/) {
print $0; # I like to be explicit - makes for easier reading
getline;
ser_no = $(1);
restofline = substr( $0, index( $0, $1) + length($1));
# which could also be done in several steps:
# start_of_ser_no = index( $0, $1 );
# end_of_ser_no = start_of_ser_no + length($1);
# restofline = substr( $0, end_of_ser_no );
print "\t\t\t\t" ++ser_no restofline;
}
else {
outline = $0;
# checking the length in the if, below, guarantees that you won't
# get the 192.168.0.130, which is where the problem lay.
if ( ($4 ~ oldip) && (length($4) == oldiplen ))
gsub( oldip, newip, outline );
print outline;
}
}
--
Message to Ashcroft:
"Necessity is the plea for every infringement of
human freedom. It is the argument of tyrants; it is
the creed of slaves." William Pitt, 1783
--
redhat-list mailing list
unsubscribe mailto:[EMAIL PROTECTED]?subject=unsubscribe
https://listman.redhat.com/mailman/listinfo/redhat-list