![sed plist 파일이 잘못된 바이트 시퀀스를 제공합니다.](https://linux55.com/image/5822/sed%20plist%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EB%B0%94%EC%9D%B4%ED%8A%B8%20%EC%8B%9C%ED%80%80%EC%8A%A4%EB%A5%BC%20%EC%A0%9C%EA%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Unix Mac 10.9.5, French CA 버전의 경우 많은 팁을 읽었지만 오류가 사라지면 plist가 손상된 것입니다.
locale 명령은 다음을 제공합니다.
LANG="fr_CA"
LC_COLLATE="fr_CA"
LC_CTYPE="fr_CA.UTF-8"
LC_MESSAGES="fr_CA"
LC_MONETARY="fr_CA"
LC_NUMERIC="fr_CA"
LC_TIME="fr_CA"
LC_ALL=
파일은 test.mac.plist라는 이름의 plist이며 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>bookmarklist.expansionStates</key>
<dict>
<key>GENEREAL</key>
<true/>
</dict>
</dict>
</plist>
스크립트 가능 또는 인라인 명령은 sed -i '.bak' « s/xxxxx/test/g » test.mac.plist입니다.
- 잘못된 바이트 순서 오류가 발생합니다.
- 제안된 대로 LC_TYPE을 LC_TYPE=C로 변경하면 파일은 다음과 같습니다.
bplist00fl
¬ !"+ -./ 2 34' 89: _ >
어떤 아이디어가 있나요?
답변1
귀하의 plist 파일이 바이너리 plist 파일로 변환되었습니다. 가장 좋은 방법은 기본값 또는 PlistBuddy를 사용하여 plist 파일을 변경하는 것입니다. 둘 다 XML 또는 바이너리 plist 파일에 씁니다. 귀하의 예에서 GENERAL 키를 false로 변경하고 싶은 것 같습니다. PlistBuddy를 사용하면 먼저 전체 항목을 삭제한 다음 해당 항목을 파일에 다시 추가해야 합니다. 전체 항목을 삭제합니다.
/usr/libexec/PlistBuddy -c "Delete :bookmarklist.expansionStates" /path/to/file
그런 다음 새 부울 값을 사용하여 항목을 다시 추가합니다.
/usr/libexec/PlistBuddy -c "Add :bookmarklist.expansionStates:GENERAL bool false" /path/to/file
기본값을 사용하려면 plist 파일이 올바른 도메인에 있어야 하며 PlistBuddy를 사용하는 것보다 유연성이 떨어집니다. 이러한 명령 앞에 LC_TYPE=C 또는 LC_ALL=C를 붙여야 할 수도 있습니다.