Я пытаюсь обработать поток данных.
Сначала я добавляю текстовый файл в свой скрипт.
Текстовый файл выглядит так:
pierwsza linia koniec
druga linia lorem1 koniec lorem1 lorem1
trzecia linia lorem1 koniec lorem1
czwarta linia lorem1 koniec
piata liniakoniec
szosta linia lorem1 koniec
Я хочу получить файл со всеми строками, но с первым появлением lorem1
.
поэтому ожидаемый результат должен быть таким:
pierwsza linia koniec
druga linia lorem1 koniec
trzecia linia koniec
czwarta linia koniec
piata liniakoniec
szosta linia koniec
Мой сценарий выглядит так
#!/usr/bin/perl -pi
use strict;
my $line = $_;
my $loremcn;
while ( $line = <> ) {
#if ( $line =~ m/lorem1/ )
foreach ( $line =~ m/lorem1/gi ) {
$loremcn++;
if ( $loremcn >= 2 ) {
$line =~ s/lorem1//gi;
}
print "$loremcn\n";
print $line;
chomp $line;
}
}
Однако результат - только одна, первая строка (из-за -pi
в начале скрипта) текста.
Скрипт правильно подсчитывает вхождения lorem1
(7), но из-за опции /g
он удаляет все lorem1
вхождения (не оставляет первого в покое).
Наконец, как в конце вывести весь исправленный текст на экран?
Обновление
Я написал этот важный комментарий к одному из ответов:
В РЛ я не могу сделать это по-своему. Весь этот тренинг состоит в том, чтобы найти способ сделать это с потоковыми данными. В истинном сценарии все данные не из открытого текста, а данные из буфера, передаваемые на принтер из SAP. И эти данные необходимо исправить на пути к принтеру