2017-04-19 40 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'变量(那些没有显示的变量)的问题...... –