Wie füge ich eine Zeile an eine bestimmte Stelle in einer Datei ein?
Inhalt:
Zeile einfügen
Eine sehr häufige Frage ist es, wie man in eine Datei eine Zeile einfügen kann und zwar an eine
bestimmte Stelle...
Dafür gibt es - wie immer - mehrere Wege. Einen möchte ich hier vorstellen.
Einfügen mit Tie::File
#! /usr/bin/perl
use strict;
use warnings;
use Tie::File;
# füge 'ein' in die dritte Zeile von test.txt ein
my $file = 'test.txt';
my $insert = 'ein ';
# entscheidendes Stück Code
tie my @array,'Tie::File',$file or die $!;
$array[2] = $insert.$array[2];
untie @array;
Löschen eines Eintrags per Kommandozeile
...ohne die ganze Datei im Speicher zu haben. Das geht am einfachsten mit
einer Kopie. Einzeiler:
perl -ni -e'print unless m/^zu löschende Zeile$/' dateiname
--
TinaMueller
Löschen eines Eintrags mit seek und tell
use strict;
use warnings;
use Fcntl ':seek';
open my $fh, '+<', "datei" or die $!;
my $tell = 0;
while (<$fh>) {
if (m/gesucht/) {
my @rest = <$fh>;
seek $fh, $tell, SEEK_SET;
truncate $fh, $tell;
print $fh @rest;
last;
}
$tell = tell $fh;
}
--
TinaMueller
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff