替换.plist文件中的行以修改<string> - 是否可能?</string>

时间:2012-09-22 00:30:04

标签: xml macos unix plist

基本上我想知道是否可以创建脚本来编辑.plist文件中的条目。但是我不想替换特定字符串,而是替换整行,因此可以添加新字符串,因为属性将不断变化。一个例子:

<string>Something</string>
<key>SomethingElse</key>
<string>Numbers</string>
<key>Entry</key>

将第三行更改为以下内容,无论该行目前的内容如何。

<string>randomstuffhere</string>

我一直在寻找几个小时,我认为使用sed可能是可能的,但在查看示例后,我似乎无法破译它自己构建它。任何和所有的帮助表示赞赏。哦,如果可能的话,我想避免使用perl。

编辑:使用以下内容时,会在“终端”窗口中进行更改,但似乎不会将其保存到文件中。使用-i显然是解决这个问题的方法,但它给我带来了一个错误,所以我不确定我做错了什么。

sed -n '/SomethingElse/{p;n;s/>.*</>randomstuffhere</;};p' my.plist

2 个答案:

答案 0 :(得分:3)

使用defaults编辑它可能最简单:

defaults write /abs/path/to/plist SomethingElse "randomstuffhere"

请注意,必须提供plist文件的绝对路径,并将“.plist”保留为其文件名。

答案 1 :(得分:0)

所以这是你要改变的第三行?

 sed -i"" '3{;s\:.*:<string>randomstuffhere</string>:;}' .plist

我认为osx sed支持-i选项,但您必须告诉它不要使用备份扩展来覆盖它。有些sed要求s ///的初始char,如果不是'/',应该被esacped,即\:。您可能只需要:

在冒险冒险文件内容之前,我会将其作为sed '3{....}' file > newFile进行测试。要测试-i"",请复制一份。

如果您希望始终更改包含Numbers的行,请使用

sed -i"" '\:<string>Numbers.*$:/<string>randomstuffhere</string>:` .plist

IHTH。