• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Perl: $ matcht nicht?

Moin, Moin,

ich hab mir die Dateien von O'Reilly zur Einführung in Perl runtergeladen und versuche nun per RegEx das Wort Fred oder fred am Zeilenende zu finden.

Code:
#!/usr/bin/perl

if ( ! open BLUBB, "./sample_text") {
    die "$!";
}

@test = <BLUBB>;

foreach $test (@test) {
  if ($test =~ /[F|f]red$/) {
    print "$test";
  }
}

print "\n";

close BLUBB;
findet aber nichts. Erst wenn ich auf /[F|f]red\r/ suche wird es was. Sollte $ nicht auch auf carriage return passen? /Z findet auch nichts, obwohl doch für jedes $test ein Zeilenende vorhanden ist.? Gibt es ein RegEx der auf alle Arten von Zeilenende passt und nicht nur auf \n
 

sc_m

Member
Grundsätzlich sollte wohl "\r?$" gehen, aber das ist vermutlich nicht das, was du suchst. Ich wüsste nicht, dass man global einstellen kann, dass $ auf \r passen soll.
Das liegt wohl daran, dass auch unter Windows kein "\r\n" im Programm ankommt, wenn Daten gelesen werden. Das steht zwar in der Datei, wird aber beim Lesen in ein einfaches "\n" umgewandelt, und diese Umwandlung fehlt natürlich unter Linux. So steht es zumindest hier.
 

abgdf

Guru
Hallo Geier0815,

bin etwas verwirrt, weil Dein Code bei mir schon geht.

Du meinst nicht das Problem, daß Windows ein anderes Zeilenendezeichen als Linux hat (Stichwort dos2unix, unix2dos), oder ?

Ansonsten, wie wäre es mit:

if ($test =~ /[F|f]red[\r\f\n]/)
{...}

Beste Grüße
 

sc_m

Member
abgdf schrieb:
weil Dein Code bei mir schon geht.
Das ist kein Wunder. Das Problem ist, dass bei Text-Dateien unter Windows jede Zeile mit "\r\n" beendet wird, unter Linux dagegen nur mit "\n". Wenn du den Text hier aus dem Forum kopierst und unter Linux abspeicherst, dann hast du eben eine original Linux-Textdatei.
:lol:
 
Oben