繁体   English   中英

替换.plist文件中的行进行修改 <string> - 可能吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM