Как я могу ограничить этот термин хитом из 3 частей? - PullRequest
1 голос
/ 10 апреля 2019

Было бы реальной задачей sadfsadf! Ghfgh% fgh65 %% этого текста заменить первые 3 символа, которые являются истинными для регулярного выражения, поэтому замените его на 'o' sadfsadfoghfghofgh65o%

#!/usr/bin/perl -w

@list=<>;
chomp(@list);

foreach(@list) {
    if($_ =~ m/\W/) {
        # here is the problem because all the characters you find it 
        #  overwrite it, but I only need to translate 3 characters from it
        $_ =~ s/\W/o/g;
        print $_."\n";
    }
    else {
        print "->\n";
    }
}

#start string => sadfsadf!ghfgh%fgh65%%
#result my program => sadfsadfoghfghofgh65oo
#and I need it => sadfsadfoghfghofgh65o%

изменить только первые 3 результата на 'o'

Ответы [ 3 ]

3 голосов
/ 10 апреля 2019

Вот путь:

use feature 'say';

my $in = 'sadfsadf!ghfgh%fgh65%%';
$in =~ s/\W/o/ for 1..3;
say $in;

Выход:

sadfsadfoghfghofgh65o%
0 голосов
/ 11 апреля 2019

ваши данные в файле 'list'

 perl -pe 'for $i(1..3){s/\W/o/} ' list

на bash, если вы поместите такие данные list='sadfsadf!ghfgh%fgh65%%'

for((i=1;i<=3;i++)){ list=`echo $list|sed -E "s/\W/Y/"`; }
0 голосов
/ 10 апреля 2019

Решена проблема Код:

#!/usr/bin/perl -w
while ($be=<STDIN>)
{
chomp $be;
push (@list, $be);
}

foreach $a (@list)
{
$count=0;
    if ($a=~/\W/)
    {
    while (($a=~m/\W/g) && ($count < 3))
    {
    $count++;
    $a=~s/\W/o/;
    }
    print "$a\n";
    }
    else {print "->\n";}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...