[英]Replace line in .plist file to modify <string> - is it possible?
基本上我想知道是否可以创建一个脚本来编辑.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
使用defaults
编辑它可能最简单:
defaults write /abs/path/to/plist SomethingElse "randomstuffhere"
请注意,您必须提供plist文件的绝对路径,并将“.plist”保留为其文件名。
另外(正如评论中所指出的),这倾向于将plist文件转换为二进制plist格式变体; 使用适当的.plist阅读框架的程序会读得很好,但它将不再是人类可读的。 如果您希望它是XML格式变体,可以使用plutil -convert xml1 /path/to/plist.plist
进行转换。
或者,您可以使用PlistBuddy
而不是defaults
:
/usr/libexec/PlistBuddy -c "Set :SomethingElse 'randomstuffhere'" /path/to/plist.plist
那么这是你要改变的第三条线?
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.