2017-04-19 58 views
0

我存储在一个名为Worker1和另一个IP地址参数的IP地址存储在SPARK_MASTER_IP桑达 - 不working-没有被更新,并没有错误

echo $Worker1 
10.100.53.185 
echo $SPARK_MASTER_IP 
10.100.53.218 

我试图取代线发现.zen.ping.unicast.hosts:[127.0.0.1]就像下面一行一样。

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

当我尝试使用SED,没有什么更新,并没有错误使用下面的命令。请帮我解决方案

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 

谢谢!

+2

你需要转义[]他们在正则表达式中定义字符列表。所以不是[127.0.0.1],你应该有\\ [127.0.0.1 \\]秒钟,你希望文件中的值使用evironement变量,你可以在整个表达式中使用'而不是'来避免“'$ varible'”这个东西,虽然不太可能是一个问题,但我不会在127.0.0.1中因为正则表达式而忽略它,意思是任何字符,所以它会匹配127A0B0C01,所以\\ [127 \ .0 \ .0 \ .1 \\] – Rob

+0

谢谢!它不是从$ Worker1 $ SPARK_MASTER_IP读取IP地址 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 – Swat

+1

@Swat:请参考下面的回答! – Inian

回答

3

正如在评论中讨论过,逃避[会做的伎俩你,

WORKER1="10.100.53.185" 
SPARK_MASTER_IP="10.100.53.218" 

sed -e 's/discovery.zen.ping.unicast.hosts: \["10.100.53.218","10.100.53.185"\]/discovery.zen.ping.unicast.hosts: \["'$WORKER1'","'$SPARK_MASTER_IP'"\]/g' file 
discovery.zen.ping.unicast.hosts: ["10.100.53.185","10.100.53.218"] 

添加-i标志就地更换,一旦你确认能够成功地发生了更换。

+0

我正在尝试在json和ip-address中使用sed没有通过,请帮助 “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”个, – Swat