Membaca nilai dari kamus yang ada di skrip shell

10

Saya punya file plist dan saya tertarik untuk mengambil nilai dari kamus bersarang menggunakan script shell. Berikut adalah struktur file plist saya:

 <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>

Saya tertarik mengambil nilai yang diberikan pada kunci "Modal" jika pengguna memberikan nama Negara.
Untuk mis. Jika saya menjalankan perintah berikut, saya mendapatkan data lengkap di bawah kamus "Negara".

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

Saya mendapatkan output berikut:

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

Bagaimana cara mengubah perintah di atas untuk memberikannya Kunci "Negara" (AS untuk mis.) Dan mengambil nilai untuk Kunci "Modal"

smokinguns
sumber
Jadi, apa pertanyaanmu? Apa yang kamu miliki sejauh ini? Anda tidak meminta kami untuk menulis skrip untuk Anda, bukan?
terdon
@terdon: Saya tidak meminta siapa pun untuk menulis naskah untuk saya. Saya ingin tahu apakah ada cara langsung untuk mengakses nilai kunci dalam kamus bersarang menggunakan perintah "default baca".
smokinguns

Jawaban:

12

default tidak dapat melakukan ini tanpa banyak kekacauan, tetapi PlistBuddy akan:

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