Lendo valores de dicionários aninhados 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 "País" (EUA para, por exemplo) e buscar o valor para a chave "Capital"

    
por smokinguns 12.10.2012 / 01:53

1 resposta

12

defaults não podem fazer isso sem muita bagunça, mas o PlistBuddy irá:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
    
por 12.10.2012 / 06:01