将gamelist.xml中的name字段中的拼音首字母索引去除后,添加到sortname字段中
## filename: addsortname.sh [gamelist.xml的路径,默认为当前路径下的gamelist.xml]
## 使用举例:./addsortname.sh /path/to/gamelist.xml
## 功能:给game元素增加sortname字段,内容为去除name中的[**]
gamelistpath="${1:-gamelist.xml}"
echo "${gamelistpath}"
# 修改编码为utf-8,以支持中文, macos请使用gsed,安装方法:brew install gsed
sed -i '1c \<?xml version="1.0" encoding="utf-8"?>' "${gamelistpath}"
# 给game元素增加sortname字段,内容为去除name中的[**]
gameList=`xmlstarlet sel -t \
--value-of '/gameList/game/name' \
--nl "${gamelistpath}"`
OLDIFS="$IFS" #备份旧的IFS变量
IFS=$'\n' #处理游戏名中带空格的情况
# 逐个添加sortname元素
for game in ${gameList}
do
echo "处理游戏名:"${game}
xmlstarlet ed -L -i \
"/gameList/game[name = \"${game}\"]/name" \
-t elem \
-n "sortname" \
-v "${game%%[*}" \
"${gamelistpath}"
done
IFS="$OLDIFS" #还原IFS变量
如果结果出现乱码,需将gameList.xml开头设置为utf-8编码
<?xml version="1.0" encoding="utf-8"?>
xmlstartlet引用shell变量失败的问题解决办法:
Bash xmlstarlet +变量不起作用(Bash xmlstarlet + variable not work)_电脑培训