encontre e substitua arry no plist

encontre e substitua arry no plist

Tentarei encontrar e substituir um array em um plist. Posso escrever com padrões escrever um array sem problemas, mas não consigo deletar um array.

A lista é:~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty

Eu gostaria de excluir:

<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>

e substitua-o por:

<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>

Procurei na internet mas não encontrei a solução ;-) Alguém pode me ajudar? Desde já agradeço sua ajuda, Netzmeister

Responder1

Desde olistaparece ser um arquivo de texto normal, no Linux basta escrever (é uma única linha)

sed 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt

onde em vez de AAA.txtvocê deve escrever seu arquivo filename.
Ele mostrará o resultado na saída padrão (aquela ttyem que você está trabalhando).

Depois de verificar se funcionou bem você pode escrever a mesma linha adicionando o parâmetro -ipara modificar o arquivo dentro

sed -i 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt


Alguma explicação mais:

 sed -i 's/OLD/NEW/g' NameOfYourFile
  • O comando acima irá pesquisar dentro do arquivo NameOfYourFiletodas as ocorrências da string OLDe irá substituí-la pela string NEW.

  • Você deve identificar adequadamente opalavra-chaveque você deseja substituir, neste caso com as tags incluídas: <string>com.apple.mail</string>.
    Como existe um, /você deve protegê-lo com um \before e a palavra-chave se torna <string>com.apple.mail<\/string>. (Você deve aplicar a mesma lógica à segunda string).

  • O parâmetro -isubstituirá a string no arquivo sem exibir o resultado na tela. Para isso pode ser melhor experimentar antes sem.
  • Sob BSDele pode ser importante oordem dos parâmetros, então sed ... -ipode não ser o mesmo sed -i ...e fornecer o erro encontrado.
  • Você pode precisar adicionar sudono início para obter oprivilégio de rootou para executar esse comando a partir de umcasca de raiz, se você não tiver permissão como usuário normal para modificar esse arquivo. (Você pode verificar isso com ls -l NameOfYourFile).

Notas

deman sed

-eu[SUFIXO],--no lugar[=SUFIXO]

          edit files in place (makes backup if SUFFIX supplied)

informação relacionada