所以这是我的问题.如何使用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
你可以使用/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的工具,我认为它对于提取值是可靠的.请注意,密钥区分大小写.