-1

フォルダに多くのhtmlファイルがあります。どういうわけかそれらすべてからを削除する必要が<div id="user-info" ...>...</div>あります。私の知る限り、そのためにPerlスクリプトを使用する必要がありますが、それを行うためにPerlを知りません。誰かが私のためにそれを手に入れることができますか?

「悪い」コードは次のようになります。

<div id="user-info" class="logged-in">
    <a class="icon icon-key-delete" href="https://test.dev/login.php?0,logout=1">Log Out</a>
    <a class="icon icon-user-edit" href="https://test.dev/control.php">Control Center</a>


</div> <!-- end of div id=user-info -->

前もって感謝します!

4

2 に答える 2

3

XML::XSH2 の使用:

for { glob '*.html' } {
    open :F html (.) ;
    delete //div[@id="user-info" and @class="logged-in"] ;
    save :b ;
}
于 2012-10-26T21:27:00.443 に答える
2

perl -0777 -i.withdiv -pe 's{<div[^>]+?id="user-info"[^>]*>.*?</div>}{}gsmi;' test.html

-0777何もない上で分割することを意味するため、ファイル全体を丸呑みします (行ごとではなく、-p のデフォルト

-i.withdivファイルをその場で変更し、拡張子 .withdiv を付けてオリジナルを残すことを意味します (-p のデフォルトは単に印刷することです)。

-p渡されたコードに行ごとに渡すことを意味します(丸呑みしていることを除く)(-eを参照)

-eコードが実行されることを期待します。

man perlrunまたはperldoc perlrun詳細については。

これは、構文が似ているため、jquery を知っている人には少しなじみのある別の解決策です。これは Mojolicious のojoモジュールを使用して、html コンテンツを Mojo::DOM オブジェクトにロードし、変換してから、その変換されたバージョンを出力します。

perl -Mojo -MFile::Slurp -E 'for (@ARGV) { say x(scalar(read_file $_))->at("#user-info")->replace("")->root; }' test.html test2.html test*.html

コンテンツを直接置き換えるには:

perl -Mojo -MFile::Slurp -E 'for (@ARGV) { write_file( $_, x(scalar(read_file $_))->at("#user-info")->replace("")->root ); }' test.html

これは div を削除するだけでなく Mojo の Mojo::DOM モジュールに基づいてコンテンツを再書き込みするため、タグ属性が同じ順序ではない可能性があることに注意してください。具体的には、 のように<div id="user-info2" class="logged-in">書き換えまし<div class="logged-in" id="user-info2">た。

Mojolicious には少なくとも perl 5.10 が必要ですが、それ以降はコア以外の要件はありません。

于 2012-10-26T21:27:39.480 に答える