Aqui está o meu script para esse tipo de coisa, que eu chamo de remove_line
:
#!/usr/bin/perl
use IO::Handle;
my $pat = shift(@ARGV) or
die("Usage: $0 pattern files\n");
$pat = qr/$pat/;
die("Usage $0 pattern files\n")
unless @ARGV;
foreach my $file (@ARGV) {
my $io = new IO::Handle;
open($io, $file) or
die("Cannot read $file: $!\n");
my @file = <$io>;
close($io);
foreach my $line (@file) {
if($line =~ /$pat/) {
$line = '';
$found = 1;
last;
}
}
if($found) {
open($io, ">$file") or
die("Cannot write $file: $!\n");
print $io @file;
close($io);
}
}
Então você faz remove_line 'string'
os arquivos em sua lista.
As vantagens de se fazer isso usando sed
é que você não precisa se preocupar com o comportamento dependente da plataforma de sed -i
e você pode usar o regex Perl para o padrão correspondente.