in reply to Searching for and removing multi-line file entries

Yet another approach... replace $test with whatever string you are looking for :) Good luck :)
use strict; my (@BUFFER,@FINAL); my $num; my $test = "Zwire6"; my $reorder = 0; my $remove = 0; while(<DATA>){ if(/$test/ig){ $remove = 1; } # set flag to remove if found if(/\[server(\d+)\]/){ if($remove == 1){ undef @BUFFER; $remove = 0; $reorder = 1;} if($reorder == 1) { $_ =~s/server$1/server$num/;} # renumber the servers push @FINAL, @BUFFER; # transfer BUFFER to FINAL undef @BUFFER; # empty BUFFER push @BUFFER, $_; # start over :) $num = scalar $1; next; } push @BUFFER, $_; } if($remove == 1){ undef @BUFFER; $remove = 0; $reorder=1; } push @FINAL, @BUFFER; #transfer the last print @FINAL; # or send it to yer handle :) __DATA__ [reports] yearlystore = quarterlystore = monthlystore = weeklystore = dailystore = [server1] logfilepath1 = F:\Logfiles\ZWire\Zwire4\split-0\ex*.log servername = Zwire4 logfilepassword = logfileusername = id = a104136320003954 [server2] servername = Zwire6 logfilepath1 = f:\logfiles\zwire\zwire6\split-0\ex*.log id = a104136346513171 logfilepassword = logfileusername = [server3] id = a104136351461256 logfilepath1 = f:\logfiles\zwire\zwire7\split-0\ex*.log logfilepassword = servername = zwire7
:)