2013-07-15 20 views
0

文件 'sample.json'(JSON):桑達:如何使用文件的contemt替換模式

{ 
    "jsonrpc": "2.0", 
    "method": "configuration.import", 
    "params": { 
     "format": "xml", 
     "source": "REPLACE_ME_WITH_XMLSOURCE" 
    }, 
    "auth": "91ea4764dcab42e8317b399c42985792", 
    "id": 1 
} 

文件 'source.xml'(XML,1個和雙引號長線):

<?xml version="1.0" encoding="UTF-8"?><zabbix_export>...</zabbix_export> 

所需的結果(JSON和XML作爲PARAM的值):

... 
    "source": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><zabbix_export>...</zabbix_export>" 
... 

我試圖把 'source.xml' 的內容,變量和SED使用它,但withou牛逼的成功:

# x=$(cat source.xml) 
# sed "s/REPLACE_ME_WITH_XMLSOURCE/$x/" sample.json 
sed: -e expression #1, char 80: unknown option to `s' 
# sed "s/XMLSOURCE/"$x"/" sample.json 
sed: -e expression #1, char 17: unterminated `s' command 
# sed "s/XMLSOURCE/"$x"/" sample.json 
... 

我試着使用變化的sed「/ REPLACE_ME_WITH_XMLSOURCE/R source.xml」,但我的sed福是不夠的,解決這個問題..

我想谷歌和搜索結果,但..你看這個問題..

感謝您的任何意見

+0

這個問題涉及到[API的zabbix configuration.import(https://www.zabbix.com/documentation/2.2/manual/api/reference/configuration) – user2583148

回答

0
# read the xml file into a variable 
xml=$(< source.xml) 
# perform the substitution, adding appropriate escaping of quotes 
sed 's|\("source": \).*|\1"'"${xml//\"/\\\\\"}"'"|' sample.json 
+0

太棒了!謝謝 – user2583148

0

你應該使用比/字符別的東西來界定的seds命令。斜槓是替換字符串的一部分,因此會混淆sed。 嘗試一些其他的分隔符是不替換字符串的一部分,如:

sed "s|REPLACE_ME_WITH_XMLSOURCE|$x|" sample.json 
+0

'$ x'中的雙引號不應該被轉義? – Kent

+0

OMG ..在我的腳本中我使用了sed 2次,並且在第一種情況下有管道分隔符(「|」)..我的思想似乎被損壞, 非常感謝 – user2583148

+0

Kent, - 是的,它是 – user2583148

相關問題