0

次のような feed.xml ファイルがあります。私がやりたいことは、このフィードから test.html を取得することです (基本的に、一番上の項目の URL)。これを行う方法について何か考えはありますか?

<rss>
<item>
    <title>ABC</title>
    <url>
        test.html
    </url>
</item>
<item>
    <title>CDE</title>
    <url>
        test1.html
    </url>
</item>
</rss>

ありがとう!

4

4 に答える 4

1

これはあなたのために働くかもしれません:

 sed '/<url>/,/<\/url>/{//d;s/ *//;q};d' file.xml
于 2012-04-11T21:11:20.957 に答える
1

構造が固定されていて、URL の接尾辞が .html であることがわかっている場合は、次のように簡単に実行できます。

  cat <yourfile> | grep ".html" | head -n1

接尾辞がわからない場合 (または文字列 "html" が前に存在する可能性がある場合)、次のことができます。

 cat <yourfile> | grep -A1 "<url>" | head -n2 | tail -n1

EDIT 構造が固定されていない場合 (つまり、改行がない場合)、ここに

 cat <yourfile> | grep -o "<url>[^<]*</url>" | head -n1 | cut -d'>' -f2 | cut -d'<' -f1

またはその

 cat <yourfile> | grep -o "<url>[^<]*</url>" | head -n1 | sed -E -e"s#<url>(.*)</url>#\1#"

動作する可能性があります。

于 2012-04-11T20:29:13.190 に答える
0

この awk スクリプトは機能するはずです。

awk '/<url>/ && url==0 {url=1;next;} {if(url==1) {print;url=2;}}' file

編集:

次の grep コマンドも機能する場合があります。

grep -m 1 "^ *<url>" -A1 file | grep -v "<url>"
于 2012-04-11T20:27:58.230 に答える
0

行ベースのツールを使用する代わりに、xsl 変換を使用して、フォーマット方法について想定せずにドキュメントから必要なデータを取得することをお勧めします。

これを次の場所に保存するとget-url.xsl:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xsl:output method="text"/>
        <xsl:template match="/">
                    <xsl:value-of select="normalize-space(rss/item/url)"/>
        </xsl:template>
</xsl:stylesheet>

次に、次のようにurlfromの値を取得できます。feed.xml

$ xsltproc get-url.xsl feed.xml; echo
test.html
$

エキストラechoは、出力の最後に改行を追加して、対話型シェルに適したものにするためのものです。を使用して結果をシェル変数に代入している場合は、それを削除してください$()

于 2012-04-11T20:50:04.380 に答える