在 Linux 中编辑 PLIST 中的值

Posted

技术标签:

【中文标题】在 Linux 中编辑 PLIST 中的值【英文标题】:Edit value inside PLIST in Linux 【发布时间】:2011-06-06 04:10:42 【问题描述】:

我有一个 XML Plist,如果该键存在,我需要一个 bash 脚本来编辑该键的整数值,如果不存在,则创建该键和整数值。这是一台 Linux 机器,所以 Mac OS X 的defaults 命令不可用。

也就是说,最终的 Plist 应该是这样的:

<dict>
    …
    <key>myKey</key>
    <integer>54</integer>
    …
</dict>

myKey是否已经存在于原始Plist中,其中整数值54由变量提供。

在 Mac OS X 中,我会这样做:

defaults write ./myPlist myKey -int $(echo $myKey_value)

但就像我说的,Linux 中没有defaults 命令。我试过sed,但显然它只能匹配单行。也许awkperl 可以,但我对这两者几乎一无所知。

【问题讨论】:

【参考方案1】:

Data::Plist::XMLWriter

【讨论】:

我宁愿不用安装任何东西,因此我尝试使用 sed 并认为 awk 或 perl 可能也适合这项工作。 @elmimmo:AWK 和sed 无法胜任这项工作。答案中的链接是针对 Perl 模块的。 我了解 XMLWriter 是如何成为这项工作的专用工具。然而,这是脚本需要执行的唯一单个 XML 操作,并且在这台计算机上也不需要其他类似性质的操作。因此,我正在考虑一种更简单的方法:如果包含 myKey 的行存在;然后删除该行和以下内容;添加行 myKey;添加以下行 $myKey_value eof 你确定 awk 不能这样做吗?嗯……我希望它尽可能便携,因此安装 perl 模块或其他东西并不好。不过,感谢您的回答。 这取决于您的 plist 的长度和深度。使用 awk/sed/ack/grep 选择单个 &lt;key&gt;asdf&lt;/key&gt; 条目将是微不足道的。如果您预计需要处理更多内容,请使用 XMLWriter。 Apple 在这里有一个 DTD:apple.com/DTDs/PropertyList-1.0.dtd

以上是关于在 Linux 中编辑 PLIST 中的值的主要内容,如果未能解决你的问题,请参考以下文章

在 NSDictionary 中编辑 plist

iPhone Dev - 从 Plist 编辑数组中的对象

在目标 c 中编辑 plist

在 Xcode 中编辑 plist

plist 捆绑版本值

在命令行中编辑 ipa plist 文件