基本上我想知道是否可以创建脚本来编辑.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
答案 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。