使用 Mac 中的 bash 仅提取 plist 中的 <key>

Extract only the <key> in plist using bash in Mac

我想提取以下plist 中Countries 中的键值。 例如,我希望输出文件仅包含以下键:

USA
ITALY

但是如果我使用下面的脚本,它将打印 Countries 下的所有嵌套元素,包括: 首都 华盛顿特区 大陆 北美。

如何修改脚本,使其只打印“国家/地区”下的键?

output=$(/usr/libexec/PlistBuddy "$infoplistPath/Info.plist" -c "Print :Nation:Countries")

这是 plist:

<dict>
<key>Nation</key>
<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>
</dict>

我找不到直接处理 PlistBuddy 的方法,但通过一些修补,我能够处理输出以获得您想要的内容:

output=$(/usr/libexec/PlistBuddy "$infoplistPath/Info.plist" -c "Print :Nation:Countries" | grep Dict | sed 's/^\(.*\) =.*//g' | grep -v "Dict {" | awk '{print }')

当你回显 $output 的内容时,它会返回:

$ echo $output
USA Italy