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.txt
você deve escrever seu arquivo filename
.
Ele mostrará o resultado na saída padrão (aquela tty
em que você está trabalhando).
Depois de verificar se funcionou bem você pode escrever a mesma linha adicionando o parâmetro -i
para 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
NameOfYourFile
todas as ocorrências da stringOLD
e irá substituí-la pela stringNEW
.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
-i
substituirá a string no arquivo sem exibir o resultado na tela. Para isso pode ser melhor experimentar antes sem. - Sob
BSD
ele pode ser importante oordem dos parâmetros, entãosed ... -i
pode não ser o mesmosed -i ...
e fornecer o erro encontrado. - Você pode precisar adicionar
sudo
no 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 comls -l NameOfYourFile
).
Notas
deman sed
-eu[SUFIXO],--no lugar[=SUFIXO]
edit files in place (makes backup if SUFFIX supplied)