
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
正規表現ではなく、好きなようにしてください。