vdf 파일의 일부 교체

vdf 파일의 일부 교체

다시 스크립트를 통해 구성 파일을 변경해 보았습니다.

jq를 살펴봤지만 jq는 .json 형식만 지원하는 것 같습니다.

.vdf는 쉼표가 없다는 점을 제외하면 .json과 거의 동일합니다.

이것은 내가하고 싶은 일이지만 sed를 사용하는 시도입니다.

#!/bin/bash

text_to_find='                  "9420"
                    {
                        "LastPlayed"        ".*"
                    }'
text_to_put='                   "9420"
                    {
                        "LastPlayed"        "1554153269"
                        "ViewedLaunchEULA"      "1"
                        "ViewedSteamPlay"       "1"
                        "BadgeData"     "02000000080b"
                        "LaunchOptions"     "PROTON_NO_ESYNC=1, PROTON_DUMP_DEBUG_COMMANDS=1 %command%"
                    }'
sed -i "s|$text_to_find|$text_to_put|1" myTestFile 

반환: "sed: -e 표현식 #1, 문자 13: 종료되지 않은 's' 명령"

내 생각에 ".*"는 이 경우에도 해석되지 않기 때문에 마지막으로 재생된 내용과 일치하지 않을 수 있습니다.

다음은 테스트 파일의 예입니다.

https://pastebin.com/qFcEhTEf

답변1

이 문제를 해결하는 한 가지 방법은 여러 sed단계를 사용하여 모든 큰따옴표를 제거하는 것입니다.

첫 번째에서는 대상 파일의 모든 큰따옴표를 마크업 문자로 바꿉니다. 즉, @원본에 나타나지 않는 것이 보장되는 문자나 문자열이어야 합니다.

그런 다음 소스 및 대상 문자열(원본 문자열과 유사)로 대체를 수행하지만 모든 따옴표는 두 문자열 모두에서 마커 문자로 대체됩니다.

마지막으로 모든 표시 문자를 큰따옴표로 바꿉니다.

에 관해서는 .*, 케이크를 가지고 있고, 그것을 먹기도 하는 상황입니다. 인용되지 않으면 bash먹히고, 인용되면 sed리터럴로 취급됩니다. 에서 참조되지만 bash에서 적용 되는 정규식을 사용하여 이 섹션을 다시 작성해야 할 수도 있습니다 sed.

그래서 내가 더 쉬울 수도 있다고 말한 거야 awk. ;) 특히 마지막 부분!

관련 정보