sed plist 파일이 잘못된 바이트 시퀀스를 제공합니다.

sed plist 파일이 잘못된 바이트 시퀀스를 제공합니다.

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입니다.

  1. 잘못된 바이트 순서 오류가 발생합니다.
  2. 제안된 대로 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를 붙여야 할 수도 있습니다.

관련 정보