Windows & Linux 文件格式之迷 < VI下删除文本中的^M>

可以用 cat –A命令来观察以DOS (Windows系统) 建立的档案的特殊格式,发现在DOS使用的断行字元(换行)为^M$,我们称为 CR 与 LF 两个符号。而在Linux系统下,换行符号仅有LF($)。因此,从windows上传文件至linux系统时,需要对文件进行格式转换。

MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下写的代码,行尾后“^M”符号。 
将Windows中的文本文件传到Linux后,会在每行的末尾多出一个^M符号。当进行Shell编程时,该符号可能会导致正则表达式匹配失败。

在linux系统中安装dos2unix与unix2dos两个软件。

#yum install –y dos2unix

#yum install –y unix2dos

使用以下命令对文件格式进行转换

#dos2unix [-kn] file [newfile]

#unix2dos [-kn] file [newfile]

选项与参数:

-k          :保留该档案原本的 mtime 时间格式 (不更新档案上次内容经过修订的时间)

-n          :保留原本的旧档,将转换后的内容输出到新档案。

eg:  dos2unix  -k –n lamp.sh lamp.sh1  将windows下面编辑的文本lamp.sh转换为linux格式下的lamp.sh1,并保留文本的时间格式。

或者利用以下命令进行替换:

vim –b lamp.dos.sh打开文件,再以一下命令进行替换。

:1,$s/^M//g         替换掉所有的^M(先按ctrl+V再按ctrl+M得到)

 
如果想去掉这个符号可以使用dos2unix命令。当然如果想恢复为Windows下的模式可以使用unix2dos命令。  
当从Windows传来一个文件时,可以使用vim -b 命令来打开该文件,这样就能看到行尾的^M符号了,否则是看不到的。
此时,可以使用:%s/^M//g对所有的“^M”进行替换。
注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的,或者Ctrl+v,再按回车。
 

可以用以下方法快速的解决:

 

方法1:
在命令模式下:输入:%s/^M//g 然后,回车即可替换

注,其中"^M"的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的

 

方法2: 

使用vi打开文本文件
    vi dos.txt
    命令模式下输入
    :set fileformat=unix
    :w

方法3:

使用sed 工具
    sed ’s/^M//’ filename > tmp_filename

方法4:(最常用的方法)

    在终端下敲命令:
    $ dos2unix filename
    直接转换成unix格式,就OK了!~

 

你可能感兴趣的:(Windows & Linux 文件格式之迷 < VI下删除文本中的^M>)