最近因为要将多语言文件整理成表格形式与安卓对齐,想到多达十几种语言,一种语言涉及到几百行,这如果要人工整理得整理到啥时候,就想到做一个shell脚本来解决这个问题。
因为在mac不能直接支持excel,所以用csv文件来代替,用时将csv转成excel即可。
csv事实上是由为逗号隔开的一行行字符串组成
如:
theme,Theme
share,Share
feedback,Feedback
rate,Rate
about,About
搞清楚原理,开始撸代码:
假设string文件格式为: key = "value";
先将" = "做一个字符替换,以免等会进行字符分割时有扰乱
替换 = 为$
srcText=" = "
destText="$"
sed -i "" "s/${srcText}/${destText}/g" temp.strings
去掉每行末尾的分号;
srcText=";"
destText=""
sed -i "" "s/${srcText}/${destText}/g" temp.strings
去掉引号
srcText="\""
destText=""
sed -i "" "s/${srcText}/${destText}/g" temp.strings
考虑到字符中有空格和逗号影响分割的精确度,均进行替换
#替换空格
srcText=" "
destText="~"
sed -i "" "s/${srcText}/${destText}/g" temp.strings
替换逗号
srcText=","
destText="^"
sed -i "" "s/${srcText}/${destText}/g" temp.strings
然后逐行读取string文件,用分割出key和value,不包含的就认定为注释项,组合成key,value的形式放入数组中
#逐行读取
arr=()
flag=0
while read LINE
do
str=$LINE
res=""
#如果包含$
if [[ $str == *"$"* ]]
then
key=`echo $str | cut -d "$" -f 1`
value=`echo $str | cut -d "$" -f 2`
res="${key},${value}"
else
if [[ $str == *"//"* ]]
then
pre="${str#*//}"
res="${pre},"
fi
fi
echo $res
arr[flag]=$res
最后再逐行写入文件,恢复替换掉的字符
for line in ${arr[@]}; do
echo $line >> reslut.csv
done
#恢复空格
srcText='~'
destText=' '
sed -i "" "s/${srcText}/${destText}/g" reslut.csv
#恢复逗号
srcText='^'
destText=','
sed -i "" "s/${srcText}/${destText}/g" reslut.csv
效果图:
如果想要将csv转化成string文件,步骤倒过来即可
shell脚本下载地址: https://github.com/taozaizai/string2csvANDcsv2string.git
如果转化中文或者其他的语言时出现乱码,请用mac自带的numbers打开。