查找字符串并在某些字符之前添加字符串

时间:2019-01-04 08:49:29

标签: regex linux shell sed

我试图找到该行,然后在其中添加一些字符串,但要在某些字符之前。这是文件:

'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
}

我还考虑过删除最后两个字符并插入新字符串。

2 个答案:

答案 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
}