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

whi*_*fin 5 xml unix macos plist

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

<string>Something</string>
<key>SomethingElse</key>
<string>Numbers</string>
<key>Entry</key>
Run Code Online (Sandbox Code Playgroud)

第三行更改为类似于以下内容的内容,而不管当前所说的是什么。

<string>randomstuffhere</string>
Run Code Online (Sandbox Code Playgroud)

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

编辑:使用以下命令时,在“终端”窗口中进行了更改,但似乎没有将其保存到文件中。使用-i显然是解决此问题的方法,但是它对我抛出了错误,因此我不确定自己在做什么错。

sed -n '/SomethingElse/{p;n;s/>.*</>randomstuffhere</;};p' my.plist
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 5

可能最容易defaults编辑它:

defaults write /abs/path/to/plist SomethingElse "randomstuffhere"
Run Code Online (Sandbox Code Playgroud)

请注意,您必须提供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
Run Code Online (Sandbox Code Playgroud)

  • defaults习惯上将.plist文件转换为二进制格式,这看起来很奇怪,但是应该可以正常工作。如果需要,可以使用`plutil -convert xml1 / path / to / plist.plist`将其转换回去,或者也可以使用PlistBuddy,因为它对转换为二进制文件没有相同的痴迷:`/ usr / libexec / PlistBuddy -c“设置:SomethingElse'randomstuffhere'” / path / to / plist.plist` (3认同)
  • 我以某种方式在PlistBuddy命令中有一个杂散空间;它应该是`/ usr / libexec / PlistBuddy -c“ Set:SomethingElse'randomstuffhere'” / path / to / plist.plist` (3认同)