sedを使用してHTMLコードにいくつかのタブと改行を追加/削除する

sedを使用してHTMLコードにいくつかのタブと改行を追加/削除する

HTML Tidyはいくつかの要件と比較して十分に柔軟ではないようです。

このコマンドを使用して、一部のタブや改行を一部のタグに追加し、他のタグから削除します。

s/<li>/\t&/g
s/\n<\/li>/<\/li>/g
  1. 最初のコマンドは、属性がなければうまく機能します。liでは、属性があるかどうかに関係なく、開始タグをどのように配置しますか?
  2. 2番目のコマンドはまったく機能しません。ここでは、前の行の最後に閉じるタグを入れたいと思います</li>

ベストアンサー1

次のサンプルファイルを考えてみましょう。

$ cat sample.html 
<li a=x>Point One
</li>
<li>Point Two
</li>

sed私はこのコマンドがあなたが望むことをすると信じています(これはGNU sedが必要な場合があります):

$ sed -Ez 's|<li\b|\t<li|g; s|\n</li\b|</li|g' sample.html
        <li a=x>Point One</li>
        <li>Point Two</li>

どのように動作しますか?

  • -E

    拡張正規表現を使用してください。

  • -z

    Null で区切られたデータを読み込みます。正しいhtmlファイルにはヌル文字がないため、ファイル全体を一度に読み取る効果があります。

  • s|<li\b|\t<li|g

    これにより、各項目の前にタブ文字が配置され、<liその後に単語の境界が表示されます。

  • s|\n</li\b|</li|g

    <liこれは、単語の境界が続く改行文字の各出現を置き換えます<li

変形:<li>線自体を配置します。

$ sed -Ez 's|<li[^>]*>|&\n|g; s|\n</li\b|</li|g' sample.html
<li a=x>
Point One</li>
<li>
Point Two</li>

義務的な警告

htmlは複雑になる可能性があるため、これらのsedコマンドは単純な場合にのみ適しています。

おすすめ記事