regex - 查找一个字符串并在某些字符之前添加一个字符串
问题描述
我正在尝试找到该行,然后在其中添加一些字符串,但在某些字符之前。这是文件:
{
"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
我还想过删除最后两个字符并插入新字符串。
解决方案
您可以使用
sed -i 's/^[[:blank:]]*"rpc-whitelist":[[:blank:]]*"[^"]*/& 123.123.123.123,123.123.123.123/' settings.json
查看在线演示
细节
^
- 匹配一行的开头[[:blank:]]*
- 0+ 空白字符"rpc-whitelist":
- 文字子串[[:blank:]]*
- 0+ 个空格"
- 一个"
字符[^"]*
- 0+ 个字符,而不是"
.
替换模式中的&
将匹配的文本粘贴回来,因此在替换操作期间不会丢失。