需要替换的json格式字符串如下所示:
cat tomcat.json
{
"service":{
"id": "consul-tomcat-id",
"name":"testyyy",
"address":"10.10.10.11",
"port":5678,
"check": {
"id": "consul-tomcat-check",
"name":"namespace22234",
"http":"127.0.0.1:896/healht/tes",
"interval": "10s",
"timeout": "2s"
}
}
}
替换脚本如下:替换值为从IP、MY_POD_NAMESPACE、SERVICEPORT、CHECKPORT、GLOABLCHECK传入
其中主要用了sed命令来替换json文件中的值,如sed -i "s/需要替换值/替换值/"
sed -i "s/\"address\":.*$/\"address\":\"$IP\",/" tomcat.json
其中 .*$ 应该统配表示所有值(但还没找到依据),如果需要对每一行匹配字符都替换末尾加g,sed -i "s///g",否则每一行只匹配第一匹配值,但不管加g还是不加g,整个文件都会去搜索的。
如果需要只匹配整个文档里的第一个匹配值,则使用
sed -i "0,/\"name\":.*$/s//\"name\":\"$MY_POD_NAMESPACE\",/" tomcat.json
sed -i '0,/需要替换值/s//替换值/' 只会匹配第一个遇到的。
#!/bin/bash
if [ "x$IP" != "x" ];then
echo "podIP--->"$IP
sed -i "s/\"address\":.*$/\"address\":\"$IP\",/" tomcat.json
fi
if [ "x$MY_POD_NAMESPACE" != "x" ];then
echo "Namespace--->"$MY_POD_NAMESPACE
#sed -i "s/\"name\":.*$/\"name\":\"$MY_POD_NAMESPACE\",/" tomcat.json
sed -i "0,/\"name\":.*$/s//\"name\":\"$MY_POD_NAMESPACE\",/" tomcat.json
fi
if [ "x$SERVICEPORT" != "x" ];then
echo "ServicePort--->"$SERVICEPORT
sed -i "s/\"port\":.*$/\"port\":$SERVICEPORT,/" tomcat.json
fi
url=''
if [ "x$CHECKPORT" != "x" ];then
echo "CheckPort--->"$CHECKPORT
if [ "x$IP" != "x" ];then
url=$IP":"$CHECKPORT
else
url="127.0.0.1:"$CHECKPORT
fi
echo "url--->"$url
sed -i "s/\"http\":.*$/\"http\":\"$url\",/" tomcat.json
fi
if [ "x$GLOABLCHECK" != "x" ];then
echo "GlobalCheck--->"$GLOABLCHECK
globalcheck=${GLOABLCHECK//\//\\/}
url=$url$globalcheck
echo "url--->"$url
sed -i "s/\"http\":.*$/\"http\":\"$url\",/" tomcat.json
fi