Я попробую найти и заменить массив в plist. Я могу писать с параметрами по умолчанию, писать массив без проблем, но я не могу удалить массив.
Список файлов:~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty
Я хотел бы удалить:
<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.apple.mail</string>
<key>LSHandlerURLScheme</key>
<string>mailto</string>
</dict>
и замените его на:
<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.microsoft.outlook</string>
<key>LSHandlerURLScheme</key>
<string>mailto</string>
</dict>
Я искал в интернете, но не нашел решения ;-) Может кто-нибудь мне помочь? Заранее благодарю за помощь, Netzmeister
решение1
Так какplistпохоже, это обычный текстовый файл, под Linux достаточно написать (это одна строка)
sed 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt
где вместо AAA.txt
вы должны написать свой filename
.
Это покажет результат на стандартном выводе ( tty
в котором вы работаете).
После того, как вы проверили, что все работает нормально, вы можете написать ту же строку, добавив параметр -i
для изменения файла внутри
sed -i 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt
Еще немного объяснений:
sed -i 's/OLD/NEW/g' NameOfYourFile
Приведенная выше команда выполнит поиск
NameOfYourFile
всех вхождений строки в файлеOLD
и заменит ее на строкуNEW
.Вы должны правильно определитьключевое словокоторый вы хотите заменить, в данном случае с включенными тегами:
<string>com.apple.mail</string>
.
Поскольку есть ,/
вам нужно защитить его с помощью\
, а ключевое слово становится<string>com.apple.mail<\/string>
. (Вы должны применить ту же логику ко второй строке).- Параметр
-i
заменит строку в файле без отображения результата на экране. Для этого может быть лучше попробовать его перед этим без. - Под
BSD
этим может быть важнопорядок параметров, поэтомуsed ... -i
они могут быть разнымиsed -i ...
и приводить к обнаруженной вами ошибке. - Вам может потребоваться добавить
sudo
в начале, чтобы получитьпривилегия root, или запустить эту команду изкорневая оболочка, если вам как обычному пользователю не разрешено изменять этот файл. (Вы можете проверить это с помощьюls -l NameOfYourFile
).
Примечания
отman sed
-я[СУФФИКС],--на месте[=СУФФИКС]
edit files in place (makes backup if SUFFIX supplied)