0

特定のファイル タイプに一致する各ファイルのパターン置換を行うスクリプトに取り組んでいます。私はこのようなパターン置換を使用しています

s/$modifydata[$loop]/$modifydata[$loop+1]/g;

しかし、これは何らかの理由ですべての一致を置き換えるわけではありません。ここで何か間違ったことをしていますか、助けてください。パターンの置換のために数ページを通過しましたが、まだ問題を見つけることができません. 失敗した文字列について、私は混乱しているように見える小さなテストperlを書きました:-(

入力 :-

[Project:CISCO_GATEWAY]
network-feed=TIG_Generated:
stream-window-start=0
stream-window-end=450
test-config=tig_generated no_disk_check

期待される出力:-

[Project:CISCO_GATEWAY_WB]
network-feed=WB_TIG_Generated:
stream-window-start2=0
stream-window-end=450
test-config=tig_generated no_disk_check

実際の出力:-

[Fusion-Project:BSKYB_GATEWAY_WB]
network-feed=TIG_Generated:
stream-window-start=0
stream-window-end=450
test-config=tig_generated no_disk_check

Perl コード スニペット :-

$modifydata[0]="TIG_";
$modifydata[1]="WB_TIG_";
$modifydata[2]="stream-window-start";
$modifydata[3]="stream-window-start2";
$modifydata[4]="CISCO_GATEWAY";
$modifydata[5]="CISCO_GATEWAY_WB";

open my $in,  '<',  $filteredfile      or die "Can't read old file: $!";
open my $out, '>', "$filteredfile.tmp" or die "Can't write new file: $!";      
while( <$in> )
{
  for (my $loop=0; $loop < scalar(@modifydata); $loop=$loop+2)
  {          
    ($modifiedline = $_) =~ s/$modifydata[$loop]/$modifydata[$loop+1]/g;
    print "1[$_] 2[$modifiedline] 3[$modifydata[$loop]] 4[$modifydata[$loop+1]]\n"
  }
}

ただし、サンプル テスト コードは機能します :-(

my $oldstring = "network-feed=TIG_Generated:";
(my $newstring = $oldstring) =~ s/TIG_/WB_TIG_/g;

print "$oldstring","\n";
print "$newstring","\n";

[rajeguna@ukstbuild3 bin]$ ./tmp.pl
network-feed=TIG_Generated:
network-feed=WB_TIG_Generated:
4

1 に答える 1

2

$modifiedline = $_ループの外で行う必要があります。以前の変更を上書きしています。

于 2013-09-16T14:33:37.487 に答える