Exclui todas as linhas de texto no arquivo HTML além da primeira?

1

Eu tenho que reescrever muitos arquivos HTML, por exemplo:

*--file1.html--*

<p>text1</p><br>
**<p>text2</p><br>
...<br>
<p>text(n)</p>**

*--file2.html--*

<img1...<br>
<img2...<br>
<p>text1</p><br>
**<p>text2</p><br>
...<br>
<p>text(n)</p>**

*--file3.html--*

<blockquote><br>
<p>text1</p><br>
**<img...<br>
<p>text2</p><br>
...<br>
<p>text(n)</p>**


*--file(n).html--*

... - various combinations of tags.

Marque [p] ... [/ p] em linhas diferentes. Preciso excluir toda a tag 'p', mas a primeira (marquei de ** para **), exemplo:

*--file1.html--*

<p>text1</p><br>


*--file2.html--*

<img1...<br>
<img2...<br>
<p>text1</p><br>

*--file3.html--*

<blockquote><br>
<p>text1</p><br>

Eu tentei isso, mas não funciona:

sed '/<p>/,</p>/d;1/<p>/!d' file*.html - I delete all the lines starting with tag p, i can not to leave a single line P tag.

sed '1!d' file*.html - work if the first line is tag p, but the first line can be tag img - so bad.

Como fazer para não remover a primeira tag p, mas o resto (da segunda tag p)? Vamos errar?

    
por user2435244 08.08.2013 / 12:57

1 resposta

0

Você pode colocar esta bandeja em branco:

perl -0777 -ne 'm#(^.*?<p>.*?</p>.*?\n).*</p>.*?\n(.*)$#s; print $1, $2' <file>

Por exemplo, se você tiver o arquivo test com o seguinte conteúdo

<blockquote><br>
<p>text1</p><br>
**<img...<br>
<p>text2</p><br>
...<br>
<p>text(n)</p>**
appendix

e você processa com o mencionado oneliner que ele coloca

<blockquote><br>
<p>text1</p><br>
appendix

como resultado na tela.

    
por 08.08.2013 / 14:05