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

    喜欢 1
标签: ,

还没有人抢沙发呢~