我必须重写很多 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
结果显示在屏幕上。