xjlittle has asked for the wisdom of the Perl Monks concerning the following question:
Hello all you Monks!
I am opening a file and want to check for a line and make a substitution or if the line does not exist write a new line. The straight substitution work well. The one to write the IP is the problem.
What is happening is that the new line is getting written after each existing line instead of getting written once.
Here is my code:
print "Please enter the ip address for this machine. This will be eth +0:\n"; my $ip = <>; chomp $ip; my $if0 = "ifcfg-eth0"; my $if1 = "ifcfg-eth1"; my $ifdir = 'network-scripts'; my $ifsub1 = "IPADDR="; my $ifsub2 = "BOOTPROTO="; my $ifsub3 = "none"; open (IP, "<", "$dir/$sys/$ifdir/$if0"); open (NEW, ">", "$dir/$sys/$ifdir/$if0.new"); while (<IP>){ s/^$ifsub2.*/$ifsub2$ifsub3/; s/^$ifsub1.*/$ifsub1$ip/ || print "$ifsub1$ip\n"; print $_; #print "$ifsub1$ip\n"; <==I tried it here too } close IP; close NEW;
Here is the output:
IPADDR=1.1.1.1 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] IPADDR=1.1.1.1 DEVICE=eth0 IPADDR=1.1.1.1 BOOTPROTO=none IPADDR=1.1.1.1 DHCPCLASS= IPADDR=1.1.1.1 HWADDR=00:0C:29:97:01:F3 IPADDR=1.1.1.1 ONBOOT=yes
The original file looks like this:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] DEVICE=eth0 BOOTPROTO=dhcp DHCPCLASS= HWADDR=00:0C:29:97:01:F3 ONBOOT=yes
Thanks for your help!
John
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to write a new line in a while loop?
by ikegami (Patriarch) on Oct 06, 2009 at 22:23 UTC | |
by xjlittle (Beadle) on Oct 06, 2009 at 23:48 UTC | |
|
Re: How to write a new line in a while loop?
by gsiems (Deacon) on Oct 06, 2009 at 22:16 UTC |