Wyrażenie regularne - sepracja zdań w pliku jednolinijkowym

0

Cześć,
Mam pewien problem, chciałbym wyświetlić w konsoli jednolinijkowy plik(notatnik), ale tak by po każdym zdaniu wstawiał "\n". Piszę to w Perlu i moim zdaniem taki kod powinien działać:

use warnings;
use strict;

my $current = ""; #obecna linia
$\ = " "; #tak zeby while szedł po słowach
while (<>){
  if ($current ne $ARGV){
       $current = $ARGV;
       print "\n\t\tFile: $ARGV\n\n";
  }#wyswietlanie nazwy pliku

  if ($_ =~ /([a-z]+\.)/){#Myslałem, ze ten regexp złapie mi słówko zakończone kropką
    print $_."\n";
  }else{
    print $_;
  }
}

Być może w tekście jest jakiś złośliwy szczegół. Używam tego wzorca:

1066 In this year the monastery at Westminster was hallowed on Childermas day (28 December). And king Eadward died on Twelfth-mass eve (5 January) and he was buried on Twelfth-mass day, in the newly hallowed church at Westminster. And earl Harold succeeded to the Kingdom of England, as the king had granted it to him and men had also chosen him thereto and he was blessed as king on Twelfth-mass day. And in the same year that he was king he went out with a naval force against William ... And the while count William landed at Hastings, on St. Michael's mass-day and Harold came from the north and fought against him before his army had all come and there he fell and his two brothers Gyrth and Leofwine and William subdued this land, and came to Westminster and archbishop Ealdred hallowed him king and men paid him tribute and gave him hostages and afterwards bought their land

Problem może się wydawać trywialny, ale jestem początkujący, a wydaje mi się, ze używanie tych wyrażeń wymaga większego obycia.
Z góry dzięki za pomoc

0

Jaki jest błąd?

1

No ale przecież od razu widać że to nie zabangla całkiem poprawnie ;]
https://regex101.com/r/oZ2pH3/1

0

@smolin1 A jak chcesz zakończone na "." to nie powinno być "$" na końcu?

0

zamien wszystkie kropki na kropka+nowa linia, unixowy tr powinien wystarczyc. swoja droga, to nie rozwiaze problemu bo kropka nie jest uzywana wylacznie do zakonczenia zdania

0

@Wizzie - Błędu jako takiego nie wyrzuca, po prostu nie wtrąca tego "\n" po zadanym warunku(powinienem o tym napisać, fakt).
@Shalom - Fajne narzędzie, będę korzystał, dzięki(w+ zamiast [a-z] lepiej to łyknie, ale ciągle nie to)
@lightinside - odkąd jako wzór do porównania bierzesz stringa bez białych znaków, nie ma to znaczenia(odpowiada za to linijka:$\ = " ";). Co innego jakbyś kręcił po linijce.
@katelx - Tak, tak w bashu chyba bym sobie z tym zadaniem poradził, chciałem to załatwić wyrażeniem regularnym. Podobno potężne, dużo mniej pisania i do Perla pasuje. Wiadomo, ze przypadki trzeba by pouwzględniać, ale chciałem się za to zabrać, jak ju ten krok będzie się poprawnie wykonywał.

0

Ok, wszystko wiadomo. źle ustawiłem separator wejścia, a właściwie w ogóle go nie ustawiłem. Tu wyjaśniona jest róznica:

http://www.kichwa.com/quik_ref/spec_variables.html

Po tej, zdawałoby się kosmetycznej zmianie z

$\ = " ";

na $/ = " ";

 wszystko działa. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1