"" 및 \가 포함된 파일을 바꾸려면 "sed"를 사용하세요.

"" 및 \가 포함된 파일을 바꾸려면 "sed"를 사용하세요.

다음과 같은 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"
...
}

관련 정보