0

2 つの Web ページがあり、1 つのページは手動で作成され、もう 1 つのページは Visual Studio 2010 (.aspx) で公開されています。これらのファイルの内容を変更して、一連のスクリプト タグを 1 つのスクリプト タグに置き換えたいと考えています。この目標を達成するために、バッチ ファイルからいくつかの Perl コードを実行するだけです。置換前と置換後の Perl コードと HTML は次のとおりです。

バッチでの Perl :

perl -pi.backup -e "s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s" file.aspx

HTML 入力 :

<!-- <pack> -->
<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>
<!-- </pack> -->

HTML出力:

<script src="pack.js"></script>

すべての行が 1 つにまとめられない限り、生成されたファイルは更新されませんが、手動で作成されたファイルではすべてが正常に機能します。問題は改行が原因だと思いますが、コードがまったく同じであるため、最初のファイルでのみ機能する理由がわかりません。

4

1 に答える 1

0

問題は、Perlを-pスイッチを指定して実行すると、各行のコードが実行され、結果が出力されることです。したがって、正規表現は一度に1行のファイルしか表示せず、パターン全体に一致することはありません。

あなたはこのようなことをすることができます:

perl -i.backup -e "undef $/; $_=<>; s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s; print" file.aspx

ファイル全体をに丸呑みして$_から、置換を実行し、結果を同じファイルに出力します。

于 2013-02-12T10:37:51.057 に答える