sedを使用して複数のファイルのHTMLブロック全体を交換する方法

sedを使用して複数のファイルのHTMLブロック全体を交換する方法

次のようなコンテンツを含むHTMLページがたくさんあります。

<div class="wrapper">

<div class="aaa">
...lot of html1 here like div's/spans etc..
</div> <!-- end aaa -->

<div class="bbb">
...lot of html2 here
</div><!-- end bbb -->

</div>

divをそのコンテンツと共にaaaクラスとbbbクラスに完全に置き換える必要があります。

だからそれは次のようになります:

<div class="wrapper">

<div class="bbb">
...lot of html2 here
</div><!-- end bbb -->

<div class="aaa">
...lot of html1 here
</div> <!-- end aaa -->

</div>

メモ:

1) ブロック間の空行はオプションです。 2)HTMLには正確なandペア
のみが含まれているため、次のような状況は不可能です。aaabbbaaabbbaaa

それでは、どのパラメータを渡すべきかを提案できますかsedfindすべてのHTMLファイルを見つけて、sed実行パラメータとして実行するために使用します。

find . -iname "*.html" -exec sed -i '' 's/WHAT IS HERE / AND HERE /g' {} \;

これはできませんが、sed可能であるとしましょう。awkあなたの期待を達成するための最善の方法についてあなたの考えを共有していただきありがとうございます。

修正する:

以下は実際のケースへのリンクです。 http://pastebin.com/mdhJ9rtL

ベストアンサー1

aaa前の部分をbbb後ろに置くには、次の手順を実行します。

sed -i '/<div class="aaa">/{
        :1
        /<\/div> <\!-- end aaa -->/!{N;b 1}
        /<\/div> <\!-- end aaa -->/{N;h}
        d}
        /<\/div><\!-- end bbb -->/{n;G}' *html

おすすめ記事