Найти строку и добавить строку перед некоторыми символами - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь найти строку, а затем добавить в нее некоторую строку, но перед некоторыми символами.Вот файл:

{
    "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.Таким образом, конечный результат будет выглядеть следующим образом:

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

Я также думал об удалении двух последних символов и вставке новой строки.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Я предлагаю использовать правильный анализатор 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
}
0 голосов
/ 04 января 2019

Вы можете использовать

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

См. онлайн-демонстрацию

Подробнее

  • ^- соответствует началу строки
  • [[:blank:]]* - 0+ пробельных символов
  • "rpc-whitelist": - буквенная подстрока
  • [[:blank:]]* - 0+ пробельных символов
  • " - " char
  • [^"]* - 0+ символов, отличных от ".

& в шаблоне замены вставляет обратносопоставленный текст, поэтому он не теряется во время операции замещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...