如何添加 SGML 结束标签?

How to add SGML end tags?

我有一个 SGML 文件,它看起来有很多 <p> 带有隐含结束标记的段落,如下所示:

<p>Here is one paragraph. 
<p>And here is another. This one contains <i>italics</i>.
<p>Finally, here is another paragraph.

这些段落没有结束标记。我想让它看起来像这样:

<p>Here is one paragraph.</p> 
<p>And here is another. This one contains <i>italics</i>.</p>
<p>Finally, here is another paragraph.</p>

有没有使用 OSS 工具的简单方法? (比如 vim、sed 等?)

%s/<p>\zs\(.*\)/<\/p>/应该可以在Vim中工作,但是"classic"的解决办法是%s/<p>/<\/p><p>/然后把第一个</p>移到文末.

在 vim 中,根据您指定的输入,您可以使用 :%s/$/<\/p>/。 请注意,这仅适用于您的示例,其中每一段都是一行。

如果是多行段落,首先连接所有行 :%j,然后将结束标记添加到开始标记 :%s/ \+<p>/<\/p><p>/,然后添加最后的结束标记 :%s/$/<\/p>/。最后用 gqap.

重排文本