2017-04-19 39 views
0

我正在研究aws雲的形成並試圖用sed和json替換句子discovery.zen.ping.unicast.hosts:[127.0.0.1]但它不能讀取存儲在$ SPARK_MASTER_IP $ Worker1下的值。cloudformation - json-sed不適用於環境變量

discovery.zen.ping.unicast.hosts: [127.0.0.1] 
discovery.zen.ping.unicast.hosts: ["10.100.53.195 ","10.100.52.124 "] 

echo $Worker1 
10.100.53.185 

echo $SPARK_MASTER_IP 
10.100.53.218 

"su - root -c 'sed -i -e \"s/discovery.zen.ping.unicast.hosts: \\[127\\.0\\.0\\.1\\]/discovery.zen.ping.unicast.hosts: \\[\\\"$SPARK_MASTER_IP\\\",\\\"$Worker1\\\"\\]/g\" /etc/elasticsearch/elasticsearch.yml'\n", 

但上述命令的輸出是

​​

請幫助

回答

0

我不知道你所有的轉義做什麼,儘管這應該工作:

sed -i 's/discovery.zen.ping.unicast.hosts: \[127\.0\.0\.1\]/discovery.zen.ping.unicast.hosts: \['\"$SPARK_MASTER_IP\"','\"$Worker1\"'\]/g' 

多行

sed -i 's/discovery.zen.ping.unicast.hosts: '\ 
'\[127\.0\.0\.1\]/discovery.zen.ping.unicast.hosts: '\ 
'\['\"$SPARK_MASTER_IP\"','\"$Worker1\"'\]/g' 

結果

discovery.zen.ping.unicast.hosts: ["10.100.53.185","10.100.53.218"] 

*應該沒有必要的-e的選擇,因爲沒有什麼附加到命令的末尾。

+0

我正在使用cloudformation和它的工作,如果我運行這樣的命令,但是當我將命令添加到aws雲形成模板它不工作,也沒有錯誤 – niri

+0

您可以嘗試包裝它,就像這樣'su - root -c「$(...)」',而'sed'命令將會在括號內的'...'處出現。它也可能是一個需要導出或輸入你的'env'變量(那些沒有顯示的變量)的問題...... –