1

我想从文件 A 中取出一些东西并重新格式化它以使用正则表达式粘贴到文件 B 中。我对 vim 有点陌生,所以这可能是一个愚蠢的问题,但我在任何地方都找不到解决方案。我想我正在寻找错误的短语。无论如何,这是我想做的事情的细节。我有一个静态 html 页面,我想要一个 RSS 提要。幸运的是,这个页面主要是指向各种新闻项目的链接,因此创建 RSS 将非常容易。

我准备好了正则表达式:

:%s/^<a href="\(.\{-}\)".title="\(.\{-}\)">\(.\{-}\)<\/a>/<title>\3<\/title>\r<link>\1<\/link>\r<description>\2<\/description> 

我的问题是我不想在我正在搜索的 html 文件中进行更改。我希望更改发生在另一个文件中,无论是新文件还是现有文件。我该如何做到这一点?还是这种方法完全关闭。

哦,顺便说一句,这个表达式在 html 文件中采用了这样的内容:

<a href="http://linktosomesite.com" title="Description of link">Title of Link</a>

并在 xml 文件中将其转换为:

<title>Title of Link</title>
<link>http://linktosomesite.com</link>
<description>Description of link</description>

奖励:如果我可以将它放在另一个文件中,那就太好了,比如从第 5 行开始。

PS:我知道这是一个 vim 和正则表达式问题,但将其发布在 html 和 rss 中,因为我注意到人们在那里有静态 html 到 rss 问题。

4

3 回答 3

3

为什么不直接复制您的文件,然后在复制的文件上使用 sed/replace?

于 2012-09-19T15:19:19.710 回答
2

只需运行您的替换并另存为另一个文件:

$ vim file.html
:%s/^<a href="\(.\{-}\)".title="\(.\{-}\)">\(.\{-}\)<\/a>/<title>\3<\/title>\r<link>\1<\/link>\r<description>\2<\/description>
:w file.rss
:q

顺便说一句,这就是我在任何编辑器中的方式。

于 2012-09-19T15:44:04.517 回答
2

听起来你想写一个转换。有很多转换工具。例如,您当然可以使用 sed 和 awk 来做到这一点。但我认为最简单的方法是 xslt。(你可以使用xsltprocsaxon...)

这是一个示例模板:

<xsl:template match="a">
    <title><xsl:value-of select="text()"/></title>
    <link><xsl:value-of select="@href"/></link>
    <description><xsl:value-of select="@title"/></description>
</xsl:template>

它找到每个a元素,并输出结果,其中填充了 text() 节点和属性。

于 2012-09-19T17:02:50.767 回答