
原因 :
在Linux上使用vim打开文件,显示很多的 ^M 字符,主要是因为在Windows下换行使用CRLF两个字符来表示,其中CR为回车(ASCII=0x0D),LF为换行(ASCII=0x0A),而在Linux下使用LF一个字符来表示。在Linux下使用vim来查看一些Windows下创建的脚本文件时,会发现在每一行尾部有^M字符,其实它是显示CR回车字符
Unix体系里,每行结尾只有“<换行>”,即“\n”;
Windows体系里面,每行结尾是“<换行><回 车>”,即“\n\r”。
一个直接结果是,Unix体系下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
如果正常编辑文件中看不见^M,可以用”cat -A test.file”号令查看。
使用vim方式处理
在vim命令模式下输入%s/^M$//g
回车即会自动删除该文件中的所有 ^M 字符。
% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换。
理解了命令的含义,就好变通使用了,比如说,要将某个文件中的 Vim 全部替换成 VIM,则可以使用这样的命令::%s/Vim/VIM/g。
方法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:
既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:
tr -d ‘\r’
方法5:使用Linux上的工具
tofrodos
(1)安装tofrodos
sudo apt-get install tofrodos
实际上它安装了两个工具:todos(相当于unix2dos),和fromdos(相当于dos2unix)
安装完即可,现在你已经可以进行文本格式的转换啦。
比如: todos Hello.txt (即unix2dos Hello.txt)
fromdos Hello.txt (即dos2unix Hello.txt)
PS :
编辑器IDE设置文件回车格式为unix格式
换行符在Linux和Windows下的区别
一、区别
换行符:
1.windows中的换行符是\r\n,
2. linux/unix下的换行符是\n。
其中:
回车符:\r=0x0d (13) return; #回车
换行符:\n=0x0a (10) newline。#换行
二、文件格式互转命令
1.unix2dos:将具有unix风格的格式文件转化为具有window下的格式文件。
2.dos2unix:将具有windows风格的格式文件转化为unix下的格式文件。
以下几个方面存在区别,如下:
1、概念方面:
回车CR-将光标移动到当前行的开头。
换行LF-将光标“垂直”移动到下一行。(而并不移动到下一行的开头,即不改变光标水平位置)
2、代码不同:
回车CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D。
换行LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A。
3、 *** 作方式不同:
Dos和windows采用回车+换行CR/LF表示下一行,而UNIX/Linux采用换行符LF表示下一行,苹果机(MAC OS系统)则采用回车符CR表示下一行。
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示。
扩展资料:
回车符和换行符的起源:
在计算机还没有出现之前,电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此),每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历。
参考资料:
百度百科--换行符
百度百科--CRLF(回车)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)