![vdf 파일의 일부 교체](https://linux55.com/image/151867/vdf%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%BC%EB%B6%80%20%EA%B5%90%EC%B2%B4.png)
다시 스크립트를 통해 구성 파일을 변경해 보았습니다.
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' 명령"
내 생각에 ".*"는 이 경우에도 해석되지 않기 때문에 마지막으로 재생된 내용과 일치하지 않을 수 있습니다.
다음은 테스트 파일의 예입니다.
답변1
이 문제를 해결하는 한 가지 방법은 여러 sed
단계를 사용하여 모든 큰따옴표를 제거하는 것입니다.
첫 번째에서는 대상 파일의 모든 큰따옴표를 마크업 문자로 바꿉니다. 즉, @
원본에 나타나지 않는 것이 보장되는 문자나 문자열이어야 합니다.
그런 다음 소스 및 대상 문자열(원본 문자열과 유사)로 대체를 수행하지만 모든 따옴표는 두 문자열 모두에서 마커 문자로 대체됩니다.
마지막으로 모든 표시 문자를 큰따옴표로 바꿉니다.
에 관해서는 .*
, 케이크를 가지고 있고, 그것을 먹기도 하는 상황입니다. 인용되지 않으면 bash
먹히고, 인용되면 sed
리터럴로 취급됩니다. 에서 참조되지만 bash
에서 적용 되는 정규식을 사용하여 이 섹션을 다시 작성해야 할 수도 있습니다 sed
.
그래서 내가 더 쉬울 수도 있다고 말한 거야 awk
. ;) 특히 마지막 부분!