detonation997
21-12-2002, 10:57
Hallo!
Wenn ich eine ASCII-Textdatei mit Perl "durchsuchen und ersetzen" will (in der Bash der Job von "sed"), dann würde ich die Datei zum Schreiben und Lesen öffnen:
============================
#!/usr/bin/perl -w
use strict;
open(FILE, "+</etc/passwd");
my $position = 0;
while (<FILE>)
{
s/eins/zwei drei/g;
seek(FILE,$position,0);
print FILE $_;
$position = tell(FILE);
}
============================
Das Problem dabei ist aber, dass Teile der Datei überschrieben werden (weil ja der ersetzende String länger als der zu suchende ist).
Ich möchte nicht die ganze Datei in ein Array (sprich den Arbeitsspeicher) einlesen, und die Datei von Grund auf neuschreiben => das würde ja bei größeren Dateien nicht mehr hinhauen, weil der Arbeitsspeicher begrenzt ist...
Wisst ihr eine Lösung?
Wenn ich eine ASCII-Textdatei mit Perl "durchsuchen und ersetzen" will (in der Bash der Job von "sed"), dann würde ich die Datei zum Schreiben und Lesen öffnen:
============================
#!/usr/bin/perl -w
use strict;
open(FILE, "+</etc/passwd");
my $position = 0;
while (<FILE>)
{
s/eins/zwei drei/g;
seek(FILE,$position,0);
print FILE $_;
$position = tell(FILE);
}
============================
Das Problem dabei ist aber, dass Teile der Datei überschrieben werden (weil ja der ersetzende String länger als der zu suchende ist).
Ich möchte nicht die ganze Datei in ein Array (sprich den Arbeitsspeicher) einlesen, und die Datei von Grund auf neuschreiben => das würde ja bei größeren Dateien nicht mehr hinhauen, weil der Arbeitsspeicher begrenzt ist...
Wisst ihr eine Lösung?