一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助。

回车符号和换行符号产生背景

关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix 系统里,每行结尾只有“<换行>”,即“\n”,十六进制数值是:0A;

Windows系统里面,每行结尾是“ <回车><换行>”,即“ \r\n”,十六进制数值是:0D0A;

Mac系统里,每行结尾是“<回车>”。即“\r”,十六进制数值是:0D;

一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号

实际观测一:

在Windows下建立一个文本文件file.txt,内容如下(在UltraEdit或NotePad++下面查看):

在Linux下用od查看,的确看到每行以CRLF结尾

qqxxz@IED42_83_sles10:~$ od -x file.txt

0000000 0d61 620a 0a0d

0000006

使用vim查看

显示正常,说明CR被vim忽略掉了

使用dos2unix转换一下

qqxxz@IED42_83_sles10:~$ dos2unix file.txt

dos2unix: converting file file.txt to UNIX format ...

qqxxz@IED42_83_sles10:~$ od -x file.txt

0000000 0a61 0a62

0000004

发现CR被删除了,每行的结尾只剩下了LF

实际观测二:

但是如果我们把文件转化为mac格式(以CR结尾)

在linux用od查看,看到每行是以CR结尾

qqxxz@IED42_83_sles10:~$ od -x file.txt

0000000 0d61 0d62

0000004

使用vim查看

就变成了所有内容都在一样,并且有很多^M,这个^M实际上就是CR,而由于没有LF,因此linux无法识别出换行信息。

解决:

1 去掉^M

1)在vim使用替换命令

:1,$ s/^M//g

^M使用ctrl-V,ctrl-M输入

2)使用tr来清除

cat file.txt |tr -d "\r" > newfile.txt

3)直接使用dos2unix

2 将^M替换为CRLF

1)直接使用mac2unix

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/linuxbug/p/4840151.html

Linux和Windows的换行符相关推荐

  1. 关于Linux和Windows的换行符

     Unix系统里,每行结尾只有"<换行>",即"\n": Windows系统里面,每行结尾是" <回车><换行> ...

  2. linux与windows回车换行符的区别

    Unix系统里,每行结尾只有"<换行>",即"\n":Windows系统里面,每行结尾是"<换行><回车>&quo ...

  3. linux的回车和换行符,【Base】linux和windows下的“回车符”和“换行符”

    Date: 2018.7.2 _____________________________________________________________________________________ ...

  4. linux文件中的换行符,Linux中的换行符

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 将windows下编写的一个txt文件在Linux下打开的时候发现每行行末都会多出^M,而将Linux编写的一个txt文件在windows下打开时发 ...

  5. linux删除最后一个换行符,如果它是文件中的最后一个字符,如何删除换行符?...

    perl -pe 'chomp if eof' filename >filename2 或者,编辑文件到位: perl -pi -e 'chomp if eof' filename [编者注: ...

  6. linux 查看文件的换行符 回车 换行

    目录 文件末尾的换行符 查看方式 cat -A 1.txt vim编辑 vi -b 1.txt 输出回车符 文件格式解读 [dos] noeol 文件末尾的换行符 有时候将windows中里创建的文件 ...

  7. linux系统下回车换行符

    简述 回车换行符在文本文件的读写中经常用到,windows下面稍微复杂点,linux系统下更为简单. 详述 回车和换行是两个不同的概念. 回车,就是告诉计算机把头定位在左边界:换行,就是把头向下移动一 ...

  8. linux中excel的换行符,Excel skill: 如何替换换行符,以及如何把一格转换成多行/多列...

    增加一辅助列,用替换函数替换掉软回车. 比如A列是数据,从A1开始,则插入B列,B1输入公式 =REPLACE(A1,FIND(CHAR(10),A1),1,"") 再用填充柄向下 ...

  9. linux echo 怎么输出换行符到文件?(echo -e)

    输出一个换行符到文件arnold_err.log echo -e >> arnold_err.log 输出两个换行符到文件arnold_err.log echo -e "\n&q ...

最新文章

  1. 西安电子科技大学计算机全国排名第几,全国五所电子类高校排名,北京邮电大学排名第三...
  2. SSO单点登录和OAuth2.0的区别和理解
  3. ICCV 2019开源论文 | 捕捉图像DNA——单幅图像下可实现任意尺度自然变换
  4. 3.QT事件处理,消息过滤器
  5. tinyxml学习2
  6. P3426-[POI2005]SZA-Template【KMP】
  7. Linux进阶之路————磁盘查询
  8. Repeater控件里面取不到CheckBox的值
  9. linux删除win分区工具,Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复...
  10. thinkphp5.0.6 连接SQLServer2008r2 配置总结
  11. 把c的char数组转换为python image的代码
  12. UCF101动作识别数据集
  13. Adroid11,拍照,裁剪以及保存图片
  14. 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:
  15. iphone/ios兼容问题
  16. 一文读懂锁相环基本原理
  17. 2021年危险化学品生产单位安全生产管理人员考试题库及危险化学品生产单位安全生产管理人员最新解析
  18. java基础 第一章 对象入门
  19. 有道难题- Unrepeating Nunbers
  20. Java相关英语单词

热门文章

  1. CF卡格式化XPE启动盘
  2. 计算机老师德育论文,浅谈小学信息技术课中的德育论文
  3. 【MATLAB】find函数及其用法
  4. IT历史:浏览器发展历史
  5. 人机对战——填子游戏的攻防策略
  6. Windows Phone 7 Series 概述、亮点以及
  7. react集成react-pdf获取文件流预览下载pdf,展示电子签章
  8. XP系统密码修改策略管理
  9. 主要的七种排序(快排、希尔排序、堆排序、归并排序、选择排序、插入排序、冒泡排序)
  10. php统计邮件打开率,八大提高邮件打开率的实战方法(原创)