【发布时间】:2013-07-11 23:01:02
【问题描述】:
我正在尝试自动为 Safari 添加有关 Java 的其他被阻止的应用程序和站点的白名单。我可以导出二进制 plist 并通过 bash 对其进行编辑,但我不知道如何搜索和替换或简单地添加到具有特定位置的文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BookmarksSidebarWidth</key>
<real>194</real>
...
<key>WhitelistedBlockedPlugins</key>
<array>
<dict>
<key>PluginHostname</key>
<string>www.java.com</string>
<key>PluginIdentifier</key>
<string>com.oracle.java.JavaAppletPlugin</string>
<key>PluginLastVisitedDate</key>
<date>2013-06-05T17:03:26Z</date>
<key>PluginName</key>
<string>Java Applet Plug-in</string>
<key>PluginPageURL</key>
<string>http://www.java.com/en/download/testjava.jsp</string>
<key>PluginPolicy</key>
<string>PluginPolicyBlockWhenInsecure</string>
</dict>
</array>
...
<key>com.apple.Safari.ContentPageGroupIdentifier.WebKit2UsesPageCache</key>
<true/>
</dict>
</plist>
<key>WhitelistedBlockedPlugins</key>
<array>
<dict>
....
....
</dict>
</array>
是我想要搜索和替换或添加的位(如果它不存在)。如果存在,则可以替换以<key>WhitelistedBlockedPlugins</key> 开头并以结束</array> 结尾的所有内容,因为无论如何我们都想控制其中的内容。
如果它不存在,我想我可以在文件末尾最后的</dict> 之前添加它。
这是我想出的逻辑,但我很难找到可以搜索的解决方案,如果找到则替换,如果找不到则添加。
在阅读 Stack Overflow 上的类似帖子后,我尝试了一些事情但没有成功。我愿意使用任何 OSX 原生的东西,包括 XCode/CLI 工具附带的东西。
我尝试过的事情:
echo 进入文件有效,但我不知道如何在</dict> 之前执行此操作,我只想在找不到<key>WhitelistedBlockedPlugins</key> 和相应的数组时这样做。有人有任何指导或解决方案吗?谢谢
【问题讨论】:
-
在 bash 中(在 linux 中)进行简单替换(主要是在一行中)我会使用
sed(sed = (S)tream (ED)itor) 但你的例子在我看来更复杂所以我会使用python脚本(或其他语言)。