参考
阮一峰的网络日志/回车和换行
Windows和Linux 行尾符(EndOfLine)的区别
linux下删除文本中所有空行的几种方法
历史
- “回车”:carriage return,简写为CR,符号\r,原始含义为把打印头定位在左边界(不下移)
- “换行”:line feed,简写为LF,符号\n,原始含义为把打印头向下移一行(其实是把纸向上移一行)
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向上移一行。
这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。
不同操作系统
- Unix系统里,每行结尾只有"<换行>",即"\n"
- Windows系统里面,每行结尾是"<回车><换行>",即"\r\n"
- Mac系统里,每行结尾是"<回车>",即"\r",后来又改成和Unix系统一致了。
证据:看看pycharm中的小图标(顺便在编辑python代码时注意这个点):
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
证据:做个小实验吧!
-
在ubuntu上建一个test.txt为(vim打开)
-
拉到windows下,使用文本编辑器打开为
使用notepad++打开的话为(注意调整视图:视图->显示符号->显示所有字符)
-
在windows建一个文件test2.txt,用文本编辑器打开为
使用notepad++打开为
(这里还多了LF空行!) -
移动到ubuntu上,使用vim打开为
文档格式转化
-
在windows上,将unix文本转化为windows文本格式:
用test.txt做实验,使用notepad++打开,然后选择编辑->文档格式转换->转为Windows(CR LF) 显示为
-
在unix上,将windows文本文件转化为unxi格式
dos2unix test2.txt
可选方法: 使用sed来做这个事情:sed -i 's/.$//g' test2.txt
(删除末尾符号)再用vim打开为
空行还是在!再使用sed -i '/^\s*$/d' test2.txt
,再用vim打开就好了