Lecture des valeurs des dictionnaires imbriqués plist dans le script shell

10

J'ai un fichier plist et je suis intéressé à récupérer des valeurs à partir de dictionnaires imbriqués à l'aide d'un script shell. Voici la structure de mon fichier 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>

Je souhaite récupérer la valeur affectée à la clé "Capital" si l'utilisateur fournit un nom de pays.
Par exemple, si j'exécute la commande suivante, j'obtiens les données complètes sous le dictionnaire "Pays".

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

J'obtiens la sortie suivante:

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

Comment puis-je modifier la commande ci-dessus pour lui passer la clé "Country" (USA par exemple) et récupérer la valeur de la clé "Capital"

fumeurs
la source
Alors, quelle est votre question? Qu'avez-vous jusqu'ici? Vous ne nous demandez pas d'écrire le script pour vous, non?
terdon
@terdon: Je ne demande à personne d'écrire le script pour moi. Je voulais savoir s'il existe un moyen direct d'accéder à la valeur d'une clé dans un dictionnaire imbriqué à l'aide de la commande "defaults read".
smokinguns

Réponses:

13

les valeurs par défaut ne peuvent pas faire cela sans beaucoup de dégâts, mais PlistBuddy va:

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