使用Perl重复更换

时间:2014-10-15 13:21:45

标签: regex perl loops

我的文件中有一个单词(模型1)20次穿插文字。我想用频率出现次数替换它,例如模型1然后再次发生模型2然后模型3,依此类推。

然而,我的循环在第一轮被卡住并且没有循环直到它已经替换了所有单词。

任何人都可以告诉我我错过了什么。任何帮助将不胜感激。

代码如下:

#!/usr/bin/perl -w

my $file = 'test.text';
open (my $fh, $file);

while (my $row = <$fh>) { 

    chomp $row;
    if (($row) =~ /^MODEL 1/){

        $i = 1;
        $row =~ s/^MODEL 1/MODEL $i/g;
        $i++;   
    }

    print "$row\n";
}

3 个答案:

答案 0 :(得分:3)

您需要在循环外移动计数器变量。

作为简化,使用s///e来匹配和替换一步:

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

my $file = 'test.text';

open my $fh, '<', $file;

my $counter = 0;

while (<$fh>) {
    chomp;

    s/^MODEL \K1/++$counter/e;

    print "$_\n";
}

答案 1 :(得分:1)

$i = 1初始化移至while循环

以上
$i = 1;
while (my $row = <$fh>) { chomp $row;
  ...
}

您重新将其重置为每一行,因此根本不会发生任何变化。

答案 2 :(得分:1)

您可以使用e修饰符增加替换模式中的计数器:

my $i=1;
while (my $row = <$fh>) {
    chomp $row;
    $row =~ s/MODEL \K1/$i++/ge
    print "$row\n";
}