2013-10-02 79 views
1

我想将一个变量传递给包含XML的sed。Sed和变量包含XML

从这个XML中,我想提取包含在<image_viewer> </image_viewer>;和<image_thumb_url> </image_thumb_url>

每个标签之间都有一个HTML链接,它们之间没有空格;每个标签+链接都在一行上。

看来我doining是完全错误的,我很新来砸......

base64 -w0 "$1" > "$1".64.jpg 

apiXml=$(curl -v -F "upload=<$1.64.jpg" -F key="$apiKey" -F format=xml "$apiUrl") 

imgView=$(echo "$apiXml" | sed 's/<image_viewer>\(.*\)<\/image_viewer>/\1/') 
imgThumb=$(echo "$apiXml" | sed 's/<image_thumb_url>\(.*\)<\/image_thumb_url>/\1/') 

imgLink="[url=$imgView][img]$imgThumb[/img][/url]" 

echo "$imgLink" 

任何建议将受到欢迎,谢谢!

+0

你的'sed'对我来说看起来很好。你可以编辑你的预期和实际输出到问题中吗?另外,你有没有尝试将XML保存到文件并在其上运行'sed'? – ThisSuitIsBlackNot

+0

如果可能的话,我希望不保存到文件,所以我没有尝试保存到文件。我的输出是每个sed命令上的整个XML文件,最后的回显只是给出了[url =] [img] [/ img] [/ url],所以它几乎不输出sed。我希望将XML中包含的链接提取出来并放在[url .../url]标签之间。 – yaka

+0

我并不是说你需要改变你的程序来写入文件,我的意思是作为一个故障排除步骤。 'sed's/foo/bar /''会为它输入的每一行输出一行,所以如果你的XML长度为500行,'sed'的输出也将是500行。 – ThisSuitIsBlackNot

回答

2

在这里使用正确的工具更容易。

read imgView < <(xmlstarlet sel -t -m '//image_viewer' -v . -n <<<"$apiXml") 
read imgThumb < <(xmlstarlet sel -t -m '//image_thumb_url' -v . -n <<<"$apiXml") 

任何XPath引擎都会这样做 - XMLStarlet只是其中之一。

+0

它工作完美,谢谢! – yaka