Isso deve funcionar bem. Ele usa manipulação de string, não expressões regulares. Ele também deve lidar com o caso em que as tags P de abertura e fechamento estão na mesma linha.
awk '
!in_p && idx = index($0,"<p>") {
in_p = 1
$0 = substr($0,idx+4)
}
in_p && idx = index($0, "</p>") {
seen_close = 1
$0 = substr($0,0,idx-1)
}
in_p {print}
seen_close {exit}
' file.html
Não funcionará como esperado se você tiver parágrafos aninhados como
<p>
Hi. Lorem Ipsum<br />
dolor si amet […]
<p>
…
</p>
</p>
<p>2nd paragraph</p>
O XML / HTML é realmente difícil de analisar manualmente: use um analisador de HTML.