Regex 如何用awk替换.env文件中的值?

Regex 如何用awk替换.env文件中的值?,regex,awk,environment-variables,Regex,Awk,Environment Variables,我有一个.env文件,其中包含以下内容: { "Config" : { "host" : "XX.XXX.XX.XXX" , "port" : 3019 } } 在bash脚本中,我有一个变量a$myNewIP。我想用awk命令将文件中的IP替换为我的变量值 我试过了 awk '/host/{sub(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})}1 .env 系统提示我有语法错误。我想这应该行得通。命令有

我有一个.env文件,其中包含以下内容:

{
    "Config" : {
        "host" : "XX.XXX.XX.XXX" ,
        "port" : 3019
    }
}
在bash脚本中,我有一个变量a
$myNewIP
。我想用
awk
命令将文件中的IP替换为我的变量值

我试过了

awk '/host/{sub(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})}1 .env

系统提示我有语法错误。我想这应该行得通。命令有什么问题?

您应该使用类似于
jq
的JSON感知工具来操作JSON文件,而不是
awk
sed
等:

jq --arg myNewIP "$myNewIP" '.Config.host = $myNewIP' .env
{
  "Config": {
    "host": "127.0.0.1",
    "port": 3019
  }
}

awk不支持
\d
,请改用
[0-9]
。。使用
\.
代替
\.
。。。另外,您还没有为
sub
指定替换字符串,并且在
1
之后缺少关闭
”。。。请参见wrt将shell变量传递给awk