sed plist 文件给出非法字节序列

sed plist 文件给出非法字节序列

对于 Unix Mac 10.9.5,法国 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=

该文件是一个 plist,名为 test.mac.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 前缀。

相关内容