用bash脚本从plist中提取字符串,也许是sed?

Dra*_*lix 4 bash sed plist

所以这是我的问题.如何使用bash脚本将这些字符串提取为3个变量?

所以出于这个:

<key>GameDir</key> <string>C:/Program Files/</string> <key>GameEXE</key> <string>C:/Program Files/any.exe</string> <key>GameFlags</key> <string>-anyflag</string>
Run Code Online (Sandbox Code Playgroud)

我想要:

GameDir=C:/Program Files/
GameEXE=C:/Program Files/any.exe
GameFlags=-anyflag
Run Code Online (Sandbox Code Playgroud)

示例脚本:

echo GameDir
echo GameEXE
echo GameFlags
Run Code Online (Sandbox Code Playgroud)

示例输出:

C:/Program Files/
C:/Program Files/any.exe
-anyflag
Run Code Online (Sandbox Code Playgroud)

键的顺序不会改变,只有字符串本身.我正在使用OS X,所以它需要是一个在OS X上开箱即用的命令.也许这可以用于sed?

谢谢Drakulix

miv*_*ivk 8

你可以使用/usr/libexec/PlistBuddy它,这似乎包含在OS X中,因为至少10.5(手册页).例:

file="$HOME/yourfile"
/usr/libexec/PlistBuddy -c "Print" "$file"
Run Code Online (Sandbox Code Playgroud)

你可以像这样分配你感兴趣的变量:

for var in GameDir GameEXE GameFlags ; do
    val=$( /usr/libexec/PlistBuddy -c "Print $var" "$file" )
    eval "export $var='$val'"
    echo "$var = $val"
done
Run Code Online (Sandbox Code Playgroud)

它似乎比bash/sed/awk正则表达式更具可读性,并且由于它是一个特定于plist的工具,我认为它对于提取值是可靠的.请注意,密钥区分大小写.