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

UtilFaqSubForm edit

Titel Wie füge ich eine Zeile an eine bestimmte Stelle in einer Datei ein?
Autor ReneeBaecker
Bereich FaqEinUndAusgabe
Topic revision: r2 - 2005-07-11 - 21:33:00 - TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.