in reply to Remove multiple lines in file if pattern found based on array element, in perl
Re-opening the same file over and over isn't very efficient, so why not read the file into memory and work on it there?. splice lets you remove a chunk of lines from an array, and <> lets you read a file into an array.
So, something along these lines should work.
use v5.18; use warnings; use autodie; my @replace = (qw/vss vdd/); open(my $in,'<','input.txt'); my @lines = <$in>; close $in; LOOP: for my $word (@replace) { my $start = -1; for my $i (0..$#lines) { if ($start == -1) { next unless $lines[$i] =~ /Power\s+information\s+for\s+$word\s+/ +; $start = $i; } else { next unless $lines[$i] =~ /}/; splice @lines,$start,$i - $start + 1; redo LOOP; } } } say @lines; # save @lines to temporary file name # rename input.txt to backup.txt # rename temporary file to input.txt
|
|---|