Matti Maekitalo: Zeilen aus Text löschen, die bestimmten String nicht beinhalten

Beitrag lesen

use Mosche;

Ich habe in einer Variablen einen mehrzeiligen Text, der garantiert mit einem Zeilenumbruch beginnt und endet, z. B.
  $text="\nCEGVZTKGF\nEGJIOJ\nJKIOH\nJIOJIO\nDFRTDEG\nZGFZUGFF\nHJUIOHUI\n";

In einer zweiten Variablen steht ein mich interessierender String, z. B.
  $relevant="EG";

Es ist kein Problem, alle Textzeilen zu löschen, die den String in $relevant enthalten:
  $text=~s/\n[^\n]*$relevant[^\n]*//g;

Ich möchte aber genau das Gegenteil erreichen: Ein regulärer Ausdruck soll dafür sorgen, daß nur noch die Zeilen übrigbleiben, die "EG" enthalten.

Ein grundsätzlich anderer Ansatz wäre sowas wie:
my @tmp;
foreach (split(/\n/, $text)) {
 push @tmp, $_ if /$relevant/;
}
$text = join "\n", @tmp;

oder, als einzeiler
$text = join ("\n", grep { /$relevant/ } split(/\n/, $text));

das sieht außerdem *geil* aus, und versteht keiner mehr 8-)

use Tschoe qw(Matti);