web-dev-qa-db-ja.com

シェルスクリプトでplistネストされた辞書から値を読み取る

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>

ユーザーが国名を指定した場合に「Capital」キーに割り当てられた値を取得することに興味があります。
たとえば、次のコマンドを実行すると、「国」辞書の下に完全なデータが表示されます。

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

次の出力が得られます。

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

上記のコマンドを変更して「国」キー(たとえば米国)を渡し、「首都」キーの値を取得するにはどうすればよいですか。

10
smokinguns

デフォルトでは、多くの混乱なしにこれを行うことはできませんが、PlistBuddyは次のことを行います。

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