Considere este arquivo de amostra:
$ cat sample.html
<li a=x>Point One
</li>
<li>Point Two
</li>
Eu acredito que este comando sed
faz o que você pede (isso pode exigir o 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>
Como funciona
-
-E
Use regex estendido.
-
-z
Ler dados delimitados por nul. Como um arquivo html adequado não possui caracteres nulos, isso tem o efeito de ler todo o arquivo de uma só vez.
-
s|<li\b|\t<li|g
Isso coloca uma guia na frente de cada ocorrência de
<li
seguido por um limite de palavras. -
s|\n</li\b|</li|g
Isso substitui todas as ocorrências de nova linha seguidas por
<li
seguido por um limite de palavra com<li
.
Uma variação: colocando <li>
em sua própria linha
$ sed -Ez 's|<li[^>]*>|&\n|g; s|\n</li\b|</li|g' sample.html
<li a=x>
Point One</li>
<li>
Point Two</li>
Aviso obrigatório
O html pode ser complexo e esses comandos sed
destinam-se apenas a trabalhar em casos simples.