我想用另一个变量替换变量中的一些文本。
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
答案 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"
}
}'