Этот скрипт примет аргумент в качестве слова для умножения.Снятие знаков препинания сделает счет точным и позволит избежать повторения знаков препинания и перевода строки.Я сохранил оригинальную строку максимально полно.
use strict;
use warnings;
my $replace = shift || "";
my @all;
my %count;
while (<DATA>) {
for (split / +/) {
my $word = s/[^A-Za-z'-]+//gr;
$count{$word}++;
if (lc $word eq lc $replace && (($count{$word} % 3) == 0)) {
push @all, $word;
}
push @all, $_;
}
}
print "@all" =~ s/\n /\n/gr;
__DATA__
Sed eleifend orci eget odio
consequat. Sed sagittis ipsum
eget pulvinar. Sed ut lacus
Sed luctus sollicitudin ligula
varius neque. Sed tincidunt
Sed mauris egestas eget. Sed
Curae; Sed aliquam enim Sed,
Sed dictum quis sem. Sed
volutpat tincidunt. Sed lacus.
Вывод:
Sed eleifend orci eget odio
consequat. Sed sagittis ipsum
eget pulvinar. Sed Sed ut lacus
Sed luctus sollicitudin ligula
varius neque. Sed tincidunt
Sed Sed mauris egestas eget. Sed
Curae; Sed aliquam enim Sed Sed,
Sed dictum quis sem. Sed
volutpat tincidunt. Sed Sed lacus.