删除 HTML 文件中除第一行之外的所有文本行?

删除 HTML 文件中除第一行之外的所有文本行?

我必须重写很多 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]。我需要删除除第一个之外的所有标记“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

您可以尝试以下 perl 单行代码:

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

然后你用上面提到的一行代码来处理它

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

结果显示在屏幕上。

相关内容