我试图找到该行,然后在其中添加一些字符串,但要在某些字符之前。这是文件:
'tb'
我希望在{
"rpc-port": 1234,
"rpc-username": "",
"rpc-whitelist": "123.4.5.2,123.123.123.123,152.125.125.125,12.45.12.45,12.36.45.78,12.69.6.1,12.4.8.95,12.45.45.45",
"rpc-whitelist-enabled": true
}
行中添加2 ip。所以最终输出将是:
rpc-whitelist
IP是动态的,因此可能会更改。
我尝试使用以下命令,但它将添加到该行的末尾。
{
"rpc-port": 1234,
"rpc-username": "",
"rpc-whitelist": "123.4.5.2,123.123.123.123,152.125.125.125,12.45.12.45,12.36.45.78,12.69.6.1,12.4.8.95,12.45.45.45,123.123.123.123,123.123.123.123",
"rpc-whitelist-enabled": true
}
我还考虑过删除最后两个字符并插入新字符串。
答案 0 :(得分:2)
您可以使用
sed -i 's/^[[:blank:]]*"rpc-whitelist":[[:blank:]]*"[^"]*/& 123.123.123.123,123.123.123.123/' settings.json
请参见online demo
详细信息
^
-匹配一行的开头[[:blank:]]*
-0 +空格字符"rpc-whitelist":
-文字子字符串[[:blank:]]*
-超过0个空格"
-一个"
字符[^"]*
-除"
以外的0多个字符。替换模式中的&
会粘贴匹配的文本,因此在替换操作期间不会丢失。
答案 1 :(得分:0)
我建议使用适当的json解析器,例如与jq
:
jq --arg ip "123.123.123.123" '."rpc-whitelist" = ."rpc-whitelist" + "," + $ip' infile.json
输出:
{
"rpc-port": 1234,
"rpc-username": "",
"rpc-whitelist": "123.4.5.2,123.123.123.123,152.125.125.125,12.45.12.45,12.36.45.78,12.69.6.1,12.4.8.95,12.45.45.45,123.123.123.123",
"rpc-whitelist-enabled": true
}