linux下把文件转换为utf8
最近要新架很多服务器,其中呢,有一些XML里面有IP设置,必须手动修改,手动修改~!哎,容易出错,而且效率低。所以我把它拿到Linux里,写个脚本,那样就快得多。
于是乎~我把这些文件弄到Linux里面,准备使用sed来实现。却发现:没反应~!
把Server1.xml的10.10.10.6替换为10.10.11.11.(可加-i参数真实替换,这样写只是显示改变了,原文件并没有改变)
sed 's/10.10.10.6/10.10.11.11/g' Server1.xml
结果内容还是原封不动。。。却很奇怪多了一些乱码。所以立马想到了是文件编码格式不一样。程序猿大大们写的代码是在Windows环境下的,编码格式为UTF16LE,Linux 环境下不认。。。所以要转换成UTF8。
find -name '*.txt' | while read file_name;
do
iconv -f gbk -t utf8 $file_name -o $file_name ;
done
还有,最开始在网上找到了这样一段代码:但是我发现,然并卵~
cat utf1628.sh
#!/bin/bash
if [ -z "$1" ];
then
echo "Please input a directory name";
exit 1;
fi
if [ -z "$2" ];
then
echo "Please input the file to convert";
exit 1;
fi
echo -n >error.log
for i in `find $1 -name "$2"`
do
# echo $i
if [ -f $i ];then
iconv -f utf16 -t utf8 $i -o tmp.txt 2>>error.log;
if [ $? -eq 0 ];
then
echo "$i is converted successfully!"
cp tmp.txt $i
else
echo -n "The file is $i , `date +'%Y-%m-%d %H:%M:%S'`">>error.log
echo >>error.log
fi
#echo $i;
fi
done
if [ -f tmp.txt ];then
rm -f tmp.txt>/dev/null;
fi
exit $?
调用:
./utf1628.sh xxx “*”
转换xxx路径下所有文件
转载请注明:崔之龙–运维小崔的个人博客 » linux下把文件转换为utf8
还没有人抢沙发呢~