HTML Tidyはいくつかの要件と比較して十分に柔軟ではないようです。
このコマンドを使用して、一部のタブや改行を一部のタグに追加し、他のタグから削除します。
s/<li>/\t&/g
s/\n<\/li>/<\/li>/g
- 最初のコマンドは、属性がなければうまく機能します。
li
では、属性があるかどうかに関係なく、開始タグをどのように配置しますか? - 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
コマンドは単純な場合にのみ適しています。