2013-10-02 115 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