Frank Schönmann: Suchen und Zeile löschen

Beitrag lesen

hi!

Wie suche ich denn mit perl in einer variablen und lösche dann die zeile in der das gesuchte
gefunden wurde aus der variablen heraus?

Ich bin mir nicht ganz sicher, was du meinst. Im Normalfall bestehen einfache Skalare nur aus einer einzigen Zeile, nicht aus mehreren.

Angenommen, du hast keine einzelne Variable, sondern eine komplette Liste mit Zeilen. Dann würde es so funktionieren:
=== cut ===
for (@liste)
{
  if (!/suchbegriff/) { push @neueliste; }
}
=== cut ===
In @neueliste stehen dann nur noch die Einträge, in denen der Suchbegriff nicht vorkommt.

Wenn du wirklich einen einzigen Skalar hast, der aus mehreren Zeilen besteht, sind diese durch \n voneinander getrennt. Dann müsstest du den Skalar erst in eine Liste aufspalten:
  @liste = split /\n/, $variable;
Mit @liste kannst du dann so verfahren wie ich es oben bereits beschrieben habe.

Letzte Möglichkeit: du hast eine Datei, aus der du eine oder mehrere Zeilen löschen willst. Dann musst du erst die Datei in eine Liste einlesen, um diese weiterzuverarbeiten:
=== cut ===
open FILE, "<datei.txt";
@liste = <FILE>;
close FILE;
for (@liste)
{
  if (!/suchbegriff/) { push @neueliste; }
}
open FILE, ">datei.txt";
for (@neueliste)
{
  print FILE "$_\n";
}
close FILE;
=== cut ===
Auf diese Weise stehen in @neueliste noch alle Zeilen, die übriggeblieben sind. Außerdem wird gleich das File neu erstellt.

Ich hoffe, die Lösung, die du gesucht hast, war darunter :-)