Lendo valores de dicionários aninhados plist no shell script

10

Eu tenho um arquivo plist e estou interessado em buscar valores de dicionários aninhados usando o shell script. Aqui está a estrutura do meu arquivo plist:

 <dict>
   <key>Countries</key>
    <dict>
        <key>USA</key>
        <dict>
           <key>Capital</key>
           <string>Washington DC</string>
           <key>Continent</key>
           <string>North America</string>
        </dict>
           <key>Italy</key>
        <dict>
           <key>Capital</key>
           <string>Rome</string>
           <key>Continent</key>
           <string>Europe</string>
        </dict>
    </dict>
 </dict>

Estou interessado em buscar o valor atribuído à chave "Capital" se o usuário fornecer um nome de país.
Por exemplo, se eu executar o seguinte comando, obtenho os dados completos no dicionário "Países".

defaults read "/Users/sameerp/Downloads/data" Countries  2>&1   

Eu recebo a seguinte saída:

{
Italy =     {
    Capital = Rome;
    Continent = Europe;
};
USA =     {
    Capital = "Washington DC";
    Continent = "North America";
};
}

Como modifico o comando acima para passar a chave "Country" (EUA, por exemplo) e buscar o valor da chave "Capital"

fumar
fonte
Então, qual é a sua pergunta? O que você tem até agora? Você não está nos pedindo para escrever o script para você, certo?
Ter12
@terdon: Não estou pedindo a ninguém que escreva o script para mim. Eu queria saber se existe uma maneira direta de acessar o valor de uma chave no dicionário aninhado usando o comando "defaults read".
smokinguns

Respostas:

13

os padrões não podem fazer isso sem muita confusão, mas o PlistBuddy irá:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Gordon Davisson
fonte