Naja, Geschmäcker sind verschieden ;-)
Dein Vorschlag funktioniert nur, wenn das Suchmuster exakt der gelesenen Zeile (inklusive Zeilenumbruch) übereinstimmt. (sorry, chomp() übersehen).
Unten mal mein Vorschlag ein wenig weiter ausgebaut und überdacht.
Die Variable
$seen ist gar nicht notwendig... daher flog sie raus; die Kontrolle, ob der Suchbegriff in der Zeile enthalten ist, übernimmt hier
index().
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use strict;
use warnings;
my $pattern = shift;
die "Kein Suchbegriff angegeben!\n" if !$pattern;
my $infile = shift;
die "Keine Datei zum Lesen angegeben!\n" if !$infile;
die "Datei '$infile' existiert nicht!\n" if !-e $infile;
die "Datei '$infile' kann nicht gelesen werden!\n" if !-r $infile;
open my $fh, '<', $infile or die "open($infile,ro) failed: $!\n";
while ( my $line = <$fh> ) {
if ( index( $line, $pattern ) >= 0 ) {
print $line, <$fh>;
}
}
close $fh;
Benutzt wird es beispielseweise so:
$ perl /tmp/t.pl zeilenweise /tmp/t.pl
# zeilenweise aus Dateihandle lesen
while ( my $line = <$fh> ) {
if ( index( $line, $pattern ) >= 0 ) {
print $line, <$fh>;
}
}
close $fh;
$
Allgemeiner Aufruf
perl /tmp/skript.pl Suchmuster /tmp/alte.date > /tmp/neue.datei
Pfade, etc. sind anzupassen...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!