1

Я постараюсь найти и заменить массив в plist. Я могу написать с настройками по умолчанию, записать массив без проблем, но я не могу удалить массив.

Перечень файлов: ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty

Я хотел бы удалить:

<ДИКТ>
<Ключ> LSHandlerPreferredVersions </ ключ>
<ДИКТ>
<Ключ> LSHandlerRoleAll </ ключ>
<Строка> - </ строка>
</ DICT>
<Ключ> LSHandlerRoleAll </ ключ>
<Строка> com.apple.mail </ строка>
<Ключ> LSHandlerURLScheme </ ключ>
<Строка> MAILTO </ строка>
</ DICT>

и заменить его на:

<ДИКТ>
<Ключ> LSHandlerPreferredVersions </ ключ>
<ДИКТ>
<Ключ> LSHandlerRoleAll </ ключ>
<Строка> - </ строка>
</ DICT>
<Ключ> LSHandlerRoleAll </ ключ>
<Строка> com.microsoft.outlook </ строка>
<Ключ> LSHandlerURLScheme </ ключ>
<Строка> MAILTO </ строка>
</ DICT>

Я искал в интернете, но не нашел решения ;-) Может кто-нибудь мне помочь? Заранее благодарю за помощь, Netzmeister

1 ответ1

0

Поскольку 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> .
    Поскольку существует / вы должны защитить его с помощью \ before, а ключевое слово становится <string>com.apple.mail<\/string> . (Вы должны применить ту же логику ко второй строке).

  • Параметр -i подставит строку в файл без отображения результата на экране. Для этого может быть лучше попробовать это раньше без.
  • В BSD может быть важен порядок параметров, поэтому sed ... -i может не совпадать с sed -i ... и выдавать ошибку, которую вы найдете.
  • Возможно, вам придется добавить sudo в начале, чтобы получить привилегию root, или запустить эту команду из корневой оболочки, если вы не можете, как обычный пользователь, изменять этот файл. (Вы можете проверить это с помощью ls -l NameOfYourFile).

Заметки

от man sed

-i [SUFFIX], --in-place [= SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .