如何在perl中匹配单个模式并将其替换为多个模式

如何在perl中匹配单个模式并将其替换为多个模式

我有一个文件,其中包含以下信息 - 输入 -

a[1]= something_data_1;
a[2]= something_data_2;
a[3]= something_data_3;

所以我想用不同的模式替换“a”,如下所示,这里 diff* 是我要替换的字符串。

输出 -

diff1 [1]= something_data_1;
diff2 [1]= something_data_1;
diff3 [1]= something_data_1;

diff1 [2]= something_data_2;
diff2 [2]= something_data_2;
diff3 [2]= something_data_2;

……

我努力了:

/usr/bin/perl -w

open(FH,'<',$file_name);
 foreach(<FH>)
  {
    if(/a(\[.*)/)
    {
      $_= "diff1$1 ". "diff2$1";
    }
  }

尝试之后我得到这样的输出,

diff[1] = diff2 some_data;

我不明白该怎么做

答案1

你可能想要类似的东西

chomp(my $line = $_);
if ($line eq "a") {
    $_ = "diff1\ndiff2\ndiff3\n";
}

我假设你还没有chomp编辑,所以$_仍然是第三个换行符。您需要捕获“a”后面的文本,以便可以重用它:

if (/^(\s*)a(\[.*)/) {
    $_ = "${1}diff1$2".
         "${1}diff2$2".
         "${1}diff3$2;
}

相关内容