Чтение значений из вложенных словарей plist в сценарии оболочки

10

У меня есть файл plist, и я заинтересован в получении значений из вложенных словарей с помощью сценария оболочки. Вот структура моего файла 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>

Я заинтересован в получении значения, назначенного клавише "Столица", если пользователь вводит название страны.
Например, если я выполню следующую команду, я получу полные данные в словаре «Страны».

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

Я получаю следующий вывод:

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

Как изменить указанную выше команду, передав ей ключ «Страна» (например, в США) и получить значение ключа «Капитал»

smokinguns
источник
Итак, какой у вас вопрос? Что у тебя до сих пор? Вы не просите нас написать сценарий для вас, верно?
Тердон
@terdon: Я не прошу никого писать сценарий для меня. Я хотел узнать, есть ли прямой способ доступа к значению ключа во вложенном словаре с помощью команды «чтение по умолчанию».
Smokinguns

Ответы:

13

значения по умолчанию не могут сделать это без большого беспорядка, но PlistBuddy будет:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Гордон Дэвиссон
источник