Linux上用shell批量把文件的编码从gb2312转到utf8
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
背景:项目中用vba写的SQL脚本生成工具,生成的SQL里面含有汉字,文件编码全是GB2312。上传到linux服务器上,orcale的字符集设置是utf8,用sqlplus执行的时候,日志中的汉字乱码,SQL中汉字更新到DB中也是乱码,发现需要把文件转成utf8。改VBA工具来不及了,只好借助shell了。
思路:正好有一些需要批量替换的schema之类的,一起用Shell实现了。Linux中可以用iconv来实现文件转码,试了一下,服务器(centos6.9)上正好安装了。就基于iconv来实现了。想这是先把文件列表列出来,再通过文件列表每个文件进行转换。由于iconv命令参数比较多,而且是输出到标准输出的,只能每个文件单独执行。选择把列表直接转成shell文件,来执行。
实现:
#!/bin/sh
#把文件夹名字改一下
mv sql sql_owner
#复制出一份SQL作为备份
cp sql_owner sql_utf8 -Rf
#生成所有文件列表
ls sql_owner/exp/*.sql -1 > sqllist
#复制一份文件列表
cp sqllist sqlutf8
#替换复制后的文件名路径
sed -i "s/sql_owner/ > sql_utf8/g" sqlutf8
#把原文件名的路径替换成 iconv的命令及参数
sed -i "s/sql_owner/iconv -f gb2312 -t utf8 sql_owner/g" sqllist
#把两个文件按行合并到一起,用tab分开,输出到u.sh文件中
paste sqllist sqlutf8 > u.sh
#给u.sh加执行权限
chmod 777 u.sh
#执行u.sh
./u.sh
#删除中间文件
rm u.sh sqlutf8 sqllist
#删除备份的文件
rm sql_owner -Rf
#把转换成utf8的文件所在文件夹改会sql
mv sql_utf8 sql
经验:
1,在linux上查看文件编码。可以使用file命令,会输出文件编码。 vim 中可以在命令模式下输入 set fileencoding,显示文件编码。
2,centos下,vim显示utf8以外的编码的文件会乱码。可以通过编辑 ~/.vimrc ,追加可识别的文件编码。
例如:set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样vim就能识别GBK编码的文件了。
3,vim打开文件直接用:set fileencoding=utf-8也可以直接把文件转成utf-8。
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献4条内容
所有评论(0)