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