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まだ編集していないと仮定しているので、$_まだ3番目の改行です。再利用できるように、「a」の後のテキストをキャプチャする必要があります。

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

おすすめ記事