다음과 같은 JSON 파일이 있습니다.
{
...
"python.pythonPath": "",
"python.defaultInterpreterPath": "",
...
}
나는 그것을 업데이트하고 싶다.
{
...
"python.pythonPath": "/Users/user/.local/share/virtualenvs/venv-Qxxxxxx9/bin/python",
"python.defaultInterpreterPath": "/Users/user/.local/share/virtualenvs/venv-Qxxxxxx9/bin/python",
...
}
이스케이프 문자를 사용하는 것이 혼란스럽습니다./그리고 작은따옴표와 큰따옴표. 이 작업을 수행하려면 sed를 어떻게 사용합니까?
참고용. 나는 시도한 macOS를 사용하고 있습니다.
sed -i "" 's|/"/"|/"/Users/user//.local/share/virtualenvs/venv-Qxxxxxx9/bin/python/"' settings.json
답변1
이는 이미 시도한 것과 유사해야 하지만 이러한 방식으로 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".
...
}
답변2
sed 명령이 작동하지 않습니다. 그러나 나는 bash에서 나를 위해 작업을 수행하는 Python 스크립트를 실행하는 방법을 찾았습니다. 누구든지 관심이 있다면:
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'
답변3
나는 이렇게 할 것입니다. 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"
...
}