用另一个变量替换变量中的文本

时间:2015-07-14 17:31:44

标签: json bash replace sed

我想用另一个变量替换变量中的一些文本。

body='{ "server": {
    "metadata": "metaToReplace"
  }
}'
meta="{
  ARTS_ORACLE_INT_IP: 10.120.47.151,
  ARTS_USER: performance
}"

我尝试了这个,但没有工作:

body=$(echo "${body}" | sed "s|\"metaToReplace\"|${meta}|g")

我收到了这个错误:

sed: -e expression #1, char 19: unterminated `s' command

2 个答案:

答案 0 :(得分:2)

替换变量中的换行符正在破坏s///命令的语法:

$ echo "${body}" | sed "s|\"metaToReplace\"|${meta}|g"
sed: -e expression #1, char 19: unterminated `s' command

我使用awk:您可以将shell变量的内容传输到awk变量:

body=$( awk -v rep="$meta" '{gsub(/"metaToReplace"/, rep); print}' <<< "$body" )

答案 1 :(得分:0)

问题是双引号没有放入body字符串。由于您使用双引号启动了字符串,因此内部引号只是匹配该字符串并结束字符串。在它周围使用单引号,以便内部引号将按字面处理,而不是作为分隔符。

body='{ "server": {
    "metadata": "metaToReplace"
  }
}'
相关问题