Удалить все строки текста в HTML-файле, кроме первого?


1

Я должен переписать много файлов HTML, например:

*--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.

Отметьте [p] ... [/ p] в разных строках. Мне нужно удалить все теги «р», но первый (я отметил от ** до **), пример:

*--file1.html--*

<p>text1</p><br>


*--file2.html--*

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

*--file3.html--*

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

Я пробовал это, но это не работает:

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.

Как сделать, чтобы удалить не первый тег p, а остальные (из второго тега p)? Давайте ошибаться?


1
это может помочь вам лучше разобраться в SO
Somesh Mukherjee

Ответы:


0

Вы можете подать этот perl oneliner:

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

Например, если у вас есть файл testсо следующим содержанием

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

и вы обрабатываете его с указанным oneliner он ставит

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

в результате на экране.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.