我有一个看起来像这样的feed.xml文件。我想要做的是从这个feed获取test.html。(基本上,最重要的项目的网址。)有关如何做到这一点的任何想法?
<rss>
<item>
<title>ABC</title>
<url>
test.html
</url>
</item>
<item>
<title>CDE</title>
<url>
test1.html
</url>
</item>
</rss>
谢谢!
答案 0 :(得分:1)
如果结构已修复,并且您知道该URL具有后缀.html,则可以执行以下操作:
cat <yourfile> | grep ".html" | head -n1
如果您不知道后缀(或之前可以存在字符串“html”),您可以这样做:
cat <yourfile> | grep -A1 "<url>" | head -n2 | tail -n1
修改强> 如果结构不固定(即没有换行符),那么就有了这个
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#"
可能会有效。
答案 1 :(得分:1)
这可能对您有用:
sed '/<url>/,/<\/url>/{//d;s/ *//;q};d' file.xml
答案 2 :(得分: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>"
答案 3 :(得分: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>
然后您可以从url
获取feed.xml
的值,如下所示:
$ xsltproc get-url.xsl feed.xml; echo
test.html
$
额外的echo
就是在输出结束后为你提供换行符,以使其对交互式shell友好。如果您要将结果分配给带有$()
的shell变量,请将其删除。