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.