ubuntu 查看文件编码并进行批量编码修改

由于windows下默认文件编码为gbk或者是gb2312,所以将windows下面的文件移到linux下时,常常会出现乱码的现象。

使用enca工具可以进行文件编码的查看。

ubuntu下enca的安装命令:

 1 sudo apt-get install enca
 2 
 3 
 4 enca查看文件
 5 
 6 enca -L zh_CN file 查看文件编码
 7 
 8 enca -L zh_CN -x UTF-8 file 更改文件编码
 9 
10 enca -L zh_CN -x UTF-8 < file1 > file2 不想覆盖原文件

下面是一个脚本,批量更改文件编码 注:文件名及文件目录没有空格时有效.可查看上一篇文件批量重命名,更改后再使用此脚本更改文件编码.

 1 #!/bin/bash
 2 #将文件编码更改为UTF-8
 3 #用法
 4 #1. 将文件命名为set_encoding.sh 
 5 #2. chmod +x set_encoding.sh
 6 #3. ./set_encoding.sh 
 7 #4. 输入目录名称
 8 #5. 输入是否递归更改
 9 #$1表示是否要递归修改文件编码
10 function change_file_encoing(){
11 for file in $(ls -h|awk '{print $0}')
12 do
13 if [[ -d "$file" && $1 = y ]];then
14 cd $file
15 echo $file
16 change_file_encoing $1
17 cd ..
18 elif [[ -f "$file" ]];then
19 echo $file
20 enca -L zh_CN -x UTF-8 $file
21 fi;
22 done; 
23 #ecna -L zh_CN file UTF-8
24 }
25 
26 read -p "please enter the dir path:" path #读取目录路径
27 if [ ! -x "$path" ]; #判断目录是否存在且是否具有执行权限
28 then 
29 echo "dir path not exists"
30 else
31 read -p "please enter if you want to recursive?y/n:" recur #是否递归
32 fi
33 if [ $recur = "y" ];
34 then
35 cd $path
36 change_file_encoing "y" #递归修改文件编码
37 else
38 cd $path
39 change_file_encoing "n" #非递归修改
40 fi

涉及到部分shell,补充如下:

字符连接:

1 str1=$name$url #中间不能有空格
2 str2="$name $url" #如果被双引号包围,那么中间可以有空格
3 str3=$name": "$url #中间可以出现别的字符串
4 str4="$name: $url" #这样写也可以
5 str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
 
Awk主要是用于对文本文件进行处理,通常是逐行处理,其语法参数格式为:
AWK常用参数、变量、函数详解如下:
1 awk  'pattern + {action}' file
(1) AWK基本语法参数详解:
1 单引号''是为了和shell命令区分开;
2 大括号{ }表示一个命令分组;
3 pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理;
4 action是处理动作,常见动作为Print;
5 使用#作为注释,pattern和action可以只有其一,但不能两者都没有。
   (2) AWK内置变量详解:
1 FS 分隔符,默认是空格;
2 OFS 输出分隔符;
3 NR 当前行数,从1开始;
4 NF 当前记录字段个数;
5 $0 当前记录;
6 $1~$n 当前记录第n个字段(列)。
   (3)bc运算:
    用于浮点数计算输出。通过管道使用。
1 tatal=$(echo "34/15" | bc)


原文地址:https://www.cnblogs.com/hongdoudou/p/12515058.html