bash - xmlstarlet -v到$ variable

时间:2013-11-12 08:57:46

标签: bash variables curl xmlstarlet

wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -n -v "link" -n -n

该行打印出rss feed中条目的标题(-v“标题)和url(-v”link“)。 我想将标题和网址存储到单独的变量中(例如$ title和$ url),以便稍后我可以将它们用于curl。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

运行xmlstarlet两次,对于您想要获得的每个信息,运行一次。

为了提高效率,您应该将URL下载到本地文件(因此只需wget一次),然后在该文件上运行xmlstarlet

title=$(xmlstarlet sel -t -m "/rss/channel/item" -v "title" local.xml)
link=$(xmlstarlet sel -t -m "/rss/channel/item" -v "link" local.xml)

我建议使用这种方法,因为它可以很好地处理元素中的空白甚至新行。

注意:要优化流程,您可以先过滤XML输入以生成一个新的XML文件,该文件只包含您想要的信息,然后再次运行xmlstarlet将其拆分为变量。

答案 1 :(得分:1)

或者你可以使用Bash的'read'内置来一次分配多个变量:

$ read title link <(wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -o " " -v "link")
$ echo $title
$ echo $link