shell脚本替换json文件中部分字段

 需要替换的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

 

你可能感兴趣的:(命令使用,shell脚本)