1

テキスト ファイル内のファイル パスを一致させ、共有ファイル パスに置き換えようとしています。EG"X:\Group_14\Project_Security"置き換えたい文字列"\\Project_Security$"

\バックスラッシュ ( ) を使用して別のバックスラッシュ ( ) をエスケープしているため、構文を理解するのに問題があります\\が、これはテキスト ファイル内のパスの一致には機能しないようです。

open INPUT, '< C:\searchfile.txt';
open OUTPUT, '> C:\logsearchfiletest.txt';
@lines = <INPUT>;
%replacements = (
    "X:\\Group_14\\Project_Security" => "\\\\Project_Security\$",
    ...
    (More Paths as above)
    ...
);
$pattern = join '|', keys %replacements;
for (@lines) {
    s/($pattern)/@{[$replacements{$1}]}/g;
    print OUTPUT;
}

何が起こっているのか完全にはわかりませ"\\\\Project_Security\$"\\Project_Security$"

問題は、正しく "X:\\Group_14\\Project_Security"評価されていないため、テキストファイル内で一致しないことにあると思いますか?
"X:\Group_14\Project_Security"

これに関するアドバイスをいただければ幸いです、乾杯。

4

3 に答える 3

1

すべてのファイルパスと置換が例と同様の形式である場合、置換を検索するためにハッシュを使用するのではなく、次のことを実行できるはずです。

for my $line (@lines) {
    $line =~ s/.+\\(.+)$/\\\\$1\$/;
    print OUTPUT $line;
}
于 2013-07-18T11:20:20.343 に答える