L23.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- iconv和dos2unix命令

3.15 iconv:转换文件的编码格式

3.15.1 命令详解

【命令星级】 ★★★☆☆

【功能说明】

​ iconv命令用于转换文件的编码格式。

【语法格式】

iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]
iconf [选项] [原编码] [新编码] [输入文件]

​ **说明:**在iconv命令及后面的选项和文件里,每个元素直接都至少要有一个空格。

【选项说明】

​ 表3-18针对该命令的参数选项进行了说明。

​ 表3-18 iconv命令的参数选项及说明
在这里插入图片描述

3.15.2 使用范例

​ **范例3-56:**转换文件编码。

​ Linux系统是UTF-8的编码,而Win7系统是GB2312的编码,从英文字符的角度来说,两者没有区别,但是Windows编辑的中文字符到Linux系统中就会有乱码,需要先转码再处理。

[root@centos7 ~]# cat GB2312.txt 
		#此行是乱码。
Hello.[root@centos7 ~]# 
[root@centos7 ~]# iconv -f gb2312 -t utf-8 GB2312.txt	#只用-f参数指定文件原来的编码为gb2312,使用-t参数指定将要转换的编码为utf-8。
Hello.[root@centos7 ~]# 

3.16 dos2unix:将DOS格式文件转换成UNIX格式

3.16.1 命令详解

【命令星级】 ★★★☆☆

【功能说明】

​ 将DOS(Windows系统)格式文件转换成UNIX格式(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以“\r\n”作为换行标志的,而UNIX下的文本文件是以“\n”作为换行标志的。所以在Linux中使用Windows的文本文件时,常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把Windows文件的“\t\n”转化成Linux文件的“\n”,unix2dos把Linux文件的“\n”转化成Windows文件的“\r\n”。

​ 这个命令也挺好记忆的,dos to unix→dos 2 (two→to)unix→dos2unix

【语法格式】

dos2unix [file]
dos2unix [文件]

说明:

​ 1)在dos2unix命令及后面的选项和文件里,每个元素直接都至少要有一个空格。

​ 2)如果系统没有dos2unix命令可以用yum -y install dos2unix安装。

3.16.2 使用范例

​ **范例3-57:**处理由Windows系统创建的脚本文件。

​ 若是在Windows中用文本文档创建一个Shell脚本,并在创建完成后将这个脚本上传到Linux系统中(很多同学在学习Shell脚本时就是这么干的),那么就会碰到下面的问题:

[root@centos7 ~]# rz -E
rz waiting to receive.
[root@centos7 ~]# cat neteagle_win.sh 	#查看上传的文件内容,没有发现异常。
#!/bin/bash
for word in I am neteagle teacher welcome to neteagle trainning class.
        do 
                [ `echo $word|wc -L` -le 6 ] && \
                echo $word
done[root@centos7 ~]# 
[root@centos7 ~]# sh neteagle_win.sh 	#但是执行这个脚本就会报错了。很多同学再三地研究也没有发现哪里出错了!!!
neteagle_win.sh: line 3: $'\r': command not found
neteagle_win.sh: line 4: $'\r': command not found
I
neteagle_win.sh: line 3: $'\r': command not found
neteagle_win.sh: line 4: $'\r': command not found
am
neteagle_win.sh: line 3: $'\r': command not found
neteagle
neteagle_win.sh: line 3: $'\r': command not found
teacher
neteagle_win.sh: line 3: $'\r': command not found
welcome
neteagle_win.sh: line 3: $'\r': command not found
neteagle_win.sh: line 4: $'\r': command not found
to
neteagle_win.sh: line 3: $'\r': command not found
neteagle
neteagle_win.sh: line 3: $'\r': command not found
trainning
neteagle_win.sh: line 3: $'\r': command not found
neteagle_win.sh: line 4: $'\r': command not found
class.
[root@centos7 ~]# cat -A neteagle_win.sh 	#其实他们的脚本没有写错,只是在一个不适合的场合下写了个脚本。使用前面学过的cat命令-A参数,查看文件的不可见字符,会发现很多行尾有……M(\r\n),但是Linux是以“\n”结尾的,因此执行这种脚本就会报错。
#!/bin/bash^M$
for word in I am neteagle teacher welcome to neteagle trainning class.^M$
        do ^M$
                [ `echo $word|wc -L` -le 6 ] && \^M$
                echo $word^M$
done[root@centos7 ~]# 
[root@centos7 ~]# dos2unix neteagle_win.sh 	#使用dos2unix转码一下,直接接文件就可以了,支持同时转换多个文件。
dos2unix: converting file neteagle_win.sh to Unix format ...
[root@centos7 ~]# cat -A neteagle_win.sh 	#现在就可以发现文见结尾就是$(\n)。
#!/bin/bash$
for word in I am neteagle teacher welcome to neteagle trainning class.$
        do $
                [ `echo $word|wc -L` -le 6 ] && \$
                echo $word$
done[root@centos7 ~]# 
[root@centos7 ~]# sh neteagle_win.sh 	#Shell脚本可以正常执行。
I
am
to
class.

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125356990