Perlまたはsedを使用して、複数のHTML一致行の前にあるすべてのエントリを削除します。

Perlまたはsedを使用して、複数のHTML一致行の前にあるすべてのエントリを削除します。

Perlまたはsedコマンドを使用して、現在のフォルダ内のすべてのファイルから複数のHTML一致行の前にあるすべてのアイテムを削除したいと思います。

現在のフォルダにある私のファイルの1つは次のとおりです。

<li>violet</li>
<p>red</p>
<p>blue</p>
<p>gray</p>

<li><a href="#part1">Part 1</a>

</li>
<h2>Part 1</h2>
<p>pink</p>

次のHTML行(見てわかるように、空行を含めることができます)を一致させる前にすべてを削除しようとしています。

<li><a href="#part1">Part 1</a>

</li>

したがって、最終編集されたファイルは次のようになります。

<h2>Part 1</h2>
<p>pink</p>

私はPerlが以下を使用して特定の文字の前のすべてを削除できることを発見しました:

perl -p -e 's/^.*?abc/abc/'

そしてsed:

sed 's/[^abc]*\(abc.*\)/\1/'

ただし、これをhtmlタグと一致させることはできません。

誰でも良い提案があるなら!

ベストアンサー1

正規表現でHTMLを解析するわけではありませんが、「次へと埋め込みコンテンツを印刷する<h2>」に基づいてこれを行うことができます。

perl -nE'state $start ||= m?<h2>? and print' ./test

Perlでも正規表現を使用しません。あなたは何かを使用しますMojo::DOM正規表現ではなく、好きなようにしてください。

おすすめ記事