1

ファイルAからいくつかのものを取り出し、正規表現を使用してファイルBに貼り付けるように再フォーマットしたいと思います。私はvimに慣れていないので、これはばかげた質問かもしれませんが、どこにも解決策が見つかりませんでした。私は間違ったフレーズを探していると思います。とにかく、ここに私がやりたいことの詳細があります。RSS フィードが必要な静的な html ページがあります。幸いなことに、このページのほとんどはさまざまなニュース アイテムへのリンクになっているため、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 と regex の質問であることはわかっていますが、html と rss に投稿するのは、静的な html から rss への質問があることに気付いたからです。

4

3 に答える 3

3

ファイルをコピーしてから、コピーしたファイルでsed / replaceを使用してみませんか?

于 2012-09-19T15:19:19.710 に答える
2

変換を書きたいようです。多くの変換ツールがあります。たとえば、 sed & awk で確かにそれを行うことができます。しかし、最も簡単な方法はxsltだと思います。(xsltprocまたはsaxon...を使用できます)

テンプレートの例を次に示します。

<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 に答える
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 に答える