найти и заменить arry в plist

найти и заменить arry в plist

Я попробую найти и заменить массив в 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)

Связанный контент