Kabuk betiğindeki plist iç içe sözlüklerden değerleri okuma


10

Ben bir plist dosyası var ve ben kabuk komut dosyası kullanarak iç içe sözlüklerden değerleri getirme ilgileniyorum. İşte benim plist dosya yapısı:

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

Kullanıcı bir Ülke adı sağlarsa "Sermaye" anahtarına atanan değeri almakla ilgileniyorum.
Örneğin, aşağıdaki komutu yürütürsem, "Ülkeler" sözlüğü altında tüm verileri alırım.

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

Aşağıdaki çıktıyı alıyorum:

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

Yukarıdaki komutu "Ülke" Anahtarını (ör. ABD için) geçirmek ve "Büyük Harf" Anahtarı değerini almak için nasıl değiştirebilirim?


Sorunuz ne? Şimdiye kadar neyin var? Senaryoyu senin için yazmamızı istemiyorsun değil mi?
terdon

@terdon: Kimseden senaryoyu benim için yazmasını istemiyorum. "Varsayılan okuma" komutunu kullanarak içiçe sözlükte bir anahtarın değerine erişmek için doğrudan bir yol olup olmadığını bilmek istedim.
smokinguns

Yanıtlar:


13

varsayılanlar bunu çok fazla karışıklık olmadan yapamaz, ancak PlistBuddy:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.