1

<\body>2000を超えるHTMLファイルの終了タグの前にJavaScriptを挿入しようとしています。これは私が試したことです。しかし、それは仕事をしません。

perl -pi -w -e 's/\<\/body\>/\<div id=\"fb-root\"\>\<\/div\>
    \<script type=\"text\/javascript\" src=\"https:\/\/connect.facebook.net\/en_US\/all.js\"\>\<\/script\> 
    \<script type=\"text\/javascript\"\>

    FB.init\(\{
        appId: \"446059218762070\", 
        status: true, 
        cookie: true, 
        xfbml: true
    });

    \/\* As of Jan 2012 you need to use \*\/
    FB.Canvas.setAutoGrow\(2\);
    \<\/script\>
\<\/body\>/g' *.html

私は他のいくつかの置換スクリプトを実行しましたがperl -pi、これは次のようにうまく機能しました

perl -pi -w -e 's/\<a href=\"index.html\"\>/\<a class=\"top_button\" href=\"index.html\"\>/g' *.html

perl -pi -w -e 's/\<link rel=\"STYLESHEET\" type=\"text\/css\" href=\"default.css\"\>/\<link rel=\"STYLESHEET\" type=\"text\/css\" href=\"default.css\"\>
\<script type=\"text\/javascript\" src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.4\/jquery.min.js\"\>\<\/script\>
\<script type=\"text\/javascript\" src=\"default.js\"\>\<\/script\>/g' *.html

誰か助けてもらえますか?私のワンライナーPerlスクリプトの何が問題になっていますか?

4

2 に答える 2

3

主な問題は、複数行の検索と置換を行おうとしているが、ファイルを1行ずつ処理していることです。次の変更されたワンライナーが機能するはずです。

perl -i -wpe 'BEGIN{undef $/;} s[<div id="fb-root".+?</body>][</body>]gs' *.html

検索文字列を簡略化したことに注意してください。HTML/JavaScriptシーケンス全体を1文字ずつ繰り返す必要はありません。検索文字列でエスケープする必要のあるメタ文字もいくつかありました。

于 2012-07-12T00:43:42.670 に答える
2

なぜ失敗するのかわかりませんが、不必要に多くの文字をエスケープしているため、間違いが見えなくなります。

パターンや置換文字列で角かっこを使用していないため、次のように角かっこを使用して置換を区切ることをお勧めします。

perl -i -wpe 's[</body>][<div id="fb-root"></div>
    <script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script> 
    <script type="text/javascript">

    FB.init({
        appId: "446059218762070", 
        status: true, 
        cookie: true, 
        xfbml: true
    });

    /* As of Jan 2012 you need to use */
    FB.Canvas.setAutoGrow(2);
    </script>
</body>]g' *.html

</body>暗闇の中でのワンショット:ファイル内のタグが大文字かどうか疑問に思いますか?その場合、あなたの試合は失敗するでしょう。念のため、i修飾子(making )を追加することをお勧めします。gi

于 2012-07-11T18:02:22.137 に答える