【问题标题】:Sed - not working- Nothing is updated and no errorSed - 不工作 - 没有更新,也没有错误
【发布时间】:2017-04-20 03:04:33
【问题描述】:

我将 ip-address 存储在一个名为 Worker1 的参数中,另一个 ip-address 存储在 SPARK_MASTER_IP 中

echo $Worker1
10.100.53.185
echo $SPARK_MASTER_IP
10.100.53.218

我正在尝试替换行 discovery.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

谢谢!

【问题讨论】:

  • 你需要转义他们在正则表达式中定义的字符列表的[]。所以不是 [127.0.0.1] 你应该有 \[127.0.0.1\] 第二你是否希望文件中的值使用环境变量你可以在整个表达式周围使用 ' 而不是 " 并避免 "' $varible'" 的东西。虽然不太可能是一个问题,但我会在 127.0.0.1 中转义 . 因为在正则表达式中 . 表示任何字符,所以它会匹配 127A0B0C01 所以 \[127\.0\.0\.1\]
  • 谢谢!它没有从 $Worker1 $SPARK_MASTER_IP sed -i -e "s/discovery.zen.ping.unicast.hosts: \ [127.0.0.1]/discovery.zen.ping.unicast.hosts: [\"' 读取 IP 地址$SPARK_MASTER_IP'\",\"'$Worker1'\"]/g" /etc/elasticsearch/elasticsearch.yml
  • @Swat:请参阅下面的答案!

标签: bash unix sed


【解决方案1】:

正如在 cmets 中所讨论的,转义 [ 会为您解决问题,

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 标志。

【讨论】:

  • 我正在尝试在 json 中使用 sed 并且 ip-address 没有通过,请帮助 "su - root -c 'sed -i -e \"s/discovery.zen.ping.unicast。主机:\[127\\.0\\.0\\.1\]/discovery.zen.ping.unicast.hosts:\[\\\"$SPARK_MASTER_IP\\\",\\\"$Worker1\ \\"\]/g\" /etc/elasticsearch/elasticsearch.yml'\n",
猜你喜欢
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多