encontrar e substituir arry em plist

1

Vou tentar encontrar e substituir um array em um plist. Eu posso escrever com padrões escrever uma matriz sem um problema, mas não posso excluir uma matriz.

O plist é: ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty

Gostaria de excluir:

< dict >
 < key > LSHandlerPreferredVersions < / key >
 < dict >
 < key & lg; LSHandlerRoleAll < / key >
  < string > - < / string >
 < / dict >
 < key & lg; LSHandlerRoleAll < / key >
 < string > com.apple.mail < / string >
 < key & lg; LSHandlerURLScheme < / key >
 < string > mailto < / string >
< / dict >

e substitua por:

< dict >
 < key > LSHandlerPreferredVersions < / key >
 < dict >
 < key & lg; LSHandlerRoleAll < / key >
  < string > - < / string >
 < / dict >
 < key & lg; LSHandlerRoleAll < / key >
 < string > com.microsoft.outlook < / string >
 < key & lg; LSHandlerURLScheme < / key >
 < string > mailto < / string >
< / dict >

Eu pesquisei na internet, mas não encontrei a solução ;-) Alguém pode me ajudar? Agradeço antecipadamente por sua ajuda, Netzmeister

    
por Netzmeister 28.09.2015 / 14:52

1 resposta

0

Como a plist parece ser uma arquivo de texto normal, no Linux é o suficiente para 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 filename .
Ele mostrará o resultado na saída padrão (o tty no qual você está trabalhando).

Depois disso você verificou 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

Algumas explicações mais :

 sed -i 's/OLD/NEW/g' NameOfYourFile
  • O comando acima irá procurar dentro do arquivo NameOfYourFile todas as ocorrências da string OLD e irá substituí-lo com a string NEW .

  • Você deve identificar adequadamente a palavra-chave que deseja substituir, neste caso com as tags incluídas: <string>com.apple.mail</string> .
    Como há um / , você precisa protegê-lo com \ antes e a palavra-chave torna-se <string>com.apple.mail<\/string> . (Você tem que aplicar a mesma lógica para a segunda string).

  • O parâmetro -i substituirá a string no arquivo sem exibir o resultado na tela. Para isso pode ser melhor tentar antes sem.
  • Abaixo de BSD , pode ser importante a ordem dos parâmetros , portanto, sed ... -i não pode ser o mesmo de sed -i ... e fornece o erro que você encontrou.
  • Pode ser necessário adicionar sudo no começo para obter o privilégio de root , ou executar esse comando a partir de um shell de root , se você não tiver permissão usuário normal para modificar esse arquivo. (Você pode verificar com ls -l NameOfYourFile ).

Notas

de man sed

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

          edit files in place (makes backup if SUFFIX supplied)
    
por 01.10.2015 / 09:54