Используйте "sed" для замены файла, содержащего "" и \

[Другой подход jq] Если вы используете jq , это буквально одна строка!

cat input.json | jq -r '.["items"] | map(select(.name | contains("first-block"))) |.[].hostRef.hostId'

П.С.

  1. Команды jq говорят сами за себя, поэтому я не пытаюсь их объяснить, если кто-то столкнется с трудностями, дайте мне знать в комментариях, я объясню!

  2. JSON, указанный в вопросе, неполный!

1
20.06.2020, 12:46
3 ответа

Мне не удалось заставить работать команду sed. Однако я нашел способ запустить скрипт Python внутри bash, который сделал эту работу за меня. Если кому интересно:

export new_path="/Users/user/.local/share/virtualenvs/venv-Qxxxxx9/bin/python"

python3 - << EOF
import json
import os

with open('settings.json', mode='r+') as file:
    data = json.load(file)
    data['python.defaultInterpreterPath'] = os.environ['new_path']
    data['python.pythonPath'] = os.environ['new_path']    
    file.seek(0)
    json.dump(data, file, indent=4, sort_keys=True)
    file.truncate()
EOF
echo 'continue bash'
0
18.03.2021, 23:25

Это должно быть похоже на то, что вы уже пробовали, но не рекомендуется редактировать файлы json таким образом, лучше использовать jq, как уже было предложено.

sed -i 's/""/"\/Users\/user\/.local\/share\/virtualenvs\/venv-Qxxxxxx9\/bin\/python"/g' settings.json

Вывод должен быть следующим:

{
...
"python.pythonPath": "/Users/user/.local/share/virtualenvs/venv-Qxxxxxx9/bin/python",
"python.defaultInterpreterPath": "/Users/user/.local/share/virtualenvs/venv-Qxxxxxx9/bin/python".
...
}
0
18.03.2021, 23:25

Вместо этого я бы сделал это в awk, что упрощает применение замены только в том случае, если значение равно""и ключ является одним из двух желаемых:

$ awk -F: -vOFS=" : " '
    $1=="\"python.pythonPath\"" || 
    $1=="\"python.defaultInterpreterPath\""{
            $2="\"/Users/user/.local/share/virtualenvs/venv-Qxxxxx9/bin/python\","}
    1;
' file 
{
...
"python.pythonPath" "/Users/user/.local/share/virtualenvs/venv-Qxxxxx9/bin/python"
"python.defaultInterpreterPath" "/Users/user/.local/share/virtualenvs/venv-Qxxxxx9/bin/python"
...
}
0
18.03.2021, 23:25

Теги

Похожие вопросы