Lettura dei valori da dizionari nidificati plist in script shell


10

Ho un file plist e sono interessato a recuperare i valori dai dizionari nidificati utilizzando lo script della shell. Ecco la struttura del mio file 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>

Sono interessato a recuperare il valore assegnato alla chiave "Capitale" se l'utente fornisce un nome di Paese.
Ad esempio, se eseguo il comando seguente, ottengo i dati completi nel dizionario "Paesi".

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

Ottengo il seguente output:

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

Come posso modificare il comando sopra per passare la chiave "Country" (USA per es.) E recuperare il valore per la chiave "Capital"


Quindi qual è la tua domanda? Cos'hai finora? Non ci stai chiedendo di scrivere la sceneggiatura per te, giusto?
terdon,

@terdon: non sto chiedendo a nessuno di scrivere la sceneggiatura per me. Volevo sapere se esiste un modo diretto per accedere al valore di una chiave nel dizionario nidificato usando il comando "default read".
smokinguns

Risposte:


13

le impostazioni predefinite non possono farlo senza un sacco di confusione, ma PlistBuddy:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.