Thread Zeilen aus Datei löschen vor Schlüsselwort (6 answers)
Opened by Ralf at 2013-02-18 15:02

Linuxer
 2013-02-18 22:26
#165880 #165880
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
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().

Code (perl): (dl )
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
#! /usr/bin/env perl
use strict;
use warnings;

# Das Suchstichwort muss als erstes Argument uebergeben werden
my $pattern = shift;

die "Kein Suchbegriff angegeben!\n"         if !$pattern;

# und dann der Dateiname, worin gesucht werden soll
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";

# zeilenweise aus Dateihandle lesen
while ( my $line = <$fh> ) {

    # wenn die aktuelle Zeile exakt den Suchbegriff enthaelt
    if ( index( $line, $pattern ) >= 0 ) {
        # dann gib die Zeile und den Rest der Datei aus.
        print $line, <$fh>;
        # bei sehr großen Dateien kann es evtl. sinnvoll sein, die obere print-Zeile durch folgende zu ersetzen
        #print $line;        # aktuell gelesen Zeile ausgeben
        #print while <$fh>;  # zeilenweise alle weiteren Zeilen ausgeben
    }
}
close $fh;


Benutzt wird es beispielseweise so:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
$ 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
Code: (dl )
 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!

View full thread Zeilen aus Datei löschen vor Schlüsselwort