首页 > 解决方案 > 查找一个字符串并在某些字符之前添加一个字符串

问题描述

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

{
    "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
}

我希望在 where is 的行中添加 2 个 ip rpc-whitelist。所以最终的输出是:

{
    "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
}

IP是动态的,所以它可能会改变。

我尝试使用以下命令,但它会在行尾添加。

sed -i '/^"rpc-whitelist"/ s/$/ 123.123.123.123,123.123.123.123/' settings.json

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

标签: regexlinuxshellsed

解决方案


您可以使用

sed -i 's/^[[:blank:]]*"rpc-whitelist":[[:blank:]]*"[^"]*/& 123.123.123.123,123.123.123.123/' settings.json 

查看在线演示

细节

  • ^- 匹配一行的开头
  • [[:blank:]]*- 0+ 空白字符
  • "rpc-whitelist":- 文字子串
  • [[:blank:]]*- 0+ 个空格
  • "- 一个"字符
  • [^"]*- 0+ 个字符,而不是".

替换模式中的&将匹配的文本粘贴回来,因此在替换操作期间不会丢失。


推荐阅读