Не удалось найти пакет libc6 -dbg _2.19 -18+deb8u6 _i386.deb

В текущих версиях Perl вы можете использовать магические массивы @-и @+для получения позиций совпадений всего регулярного выражения и любых возможных групп захвата. Нулевой элемент обоих массивов содержит индексы, относящиеся ко всей подстроке, поэтому вас интересует $-[0].

В виде одного -вкладыша:

$ echo 'aöæaæaæa' | perl -CSDLA -ne 'BEGIN { $pattern = shift }; printf "%d\n", $-[0] while $_ =~ m/$pattern/g;'  æa
2
4
6

Или полный скрипт:

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Encode;
use open  ":encoding(utf8)";
undef $/;
my $pattern = decode_utf8(shift);
binmode STDIN, ":utf8";
while (<STDIN>) {
    printf "%d\n", $-[0] while $_ =~ m/$pattern/g;
}

напр.

$ echo 'aöæaæaæa' | perl match.pl æa -
2
4
6

(Последний сценарий работает только для стандартного ввода. Кажется, мне трудно заставить Perl обрабатывать все файлы как UTF -8.)

0
03.08.2021, 06:22
0 ответов

Теги

Похожие вопросы