Я пытаюсь автоматизировать добавление белого списка заблокированных приложений и сайтов для Safari в отношении Java. Я могу экспортировать двоичный plist и редактировать его через bash, но я зациклился на том, как искать и заменять или просто добавлять в файл с определенным размещением.Bash - изменение WhitelistedBlockedPlugins в текстовом файле plist
<?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>
The
<key>WhitelistedBlockedPlugins</key>
<array>
<dict>
....
....
</dict>
</array>
это немного, я хотел бы найти и заменить или добавить, если он не существует. Если он существует, вполне можно заменить все, начиная с <key>WhitelistedBlockedPlugins</key>
и заканчивая закрытием </array>
, так как мы все равно хотим контролировать, что там происходит.
Если он не существует, я могу добавить его непосредственно перед окончательным </dict>
в конце файла.
Это логика, с которой я столкнулся, но мне очень сложно найти решение, где я могу искать, если найду замену, если не нашел.
Я пробовал несколько вещей без успеха после прочтения подобных сообщений в переполнении стека. Я готов использовать что-то родное для OSX, включая то, что поставляется с инструментами XCode/CLI.
Что я пробовал:
echo
в файл работает, но я не выяснить, как сделать это до </dict>
и я только хочу, чтобы сделать это, если массив <key>WhitelistedBlockedPlugins</key>
и соответствующий является нигде не было найдено. У кого-нибудь есть какие-либо рекомендации или решения? Благодаря
В Баш (в Linux) для простой замены (в основном что-то в одной строке) Я хотел бы использовать 'sed' (SED = (S) Tream (ED) itor), но ваш пример кажется, мне более сложно, поэтому я бы использовал скрипт python (или другой язык). – furas