换行符的话题 -- clwu

最近不同的开发同事由于在代码文件中采用的 换行符 不同,而导致了在git merge代码阶段diff操作时增加了额外的人工判断成本,

如下图

回顾一下 换行符 的几种标准,来源历史就不说了,可以百度一下。

打开任何一个IDE都能看到类似的Code Style设置,Mac(\r) 这种机已经不生产了。

BUT 还有一种 “换行符”,留在文末补充中说。

先上一张  ASCII 表,后面分析问题要用到:man ascii

回来说一下我们遇到的问题,初看起来像 图一,就是多了个^M,

但仔细看一下二进制格式(通过xxd可以看到二进制下的情况),就看出是可以分成两种情况的

情况一:就是不同换行符的问题

L3有^M,但L4没有^M

这种情况下 类似dos2unix 或者tr 命令就可以处理了

情况二:不止是不同换行符,还多了一个\r (0x0D)

这种情况下 唯有用sed处理了。

最后,我们统一为Unix换行符(\n),写个脚本把所有的\r(0x0D)都删除了(不管是情况一还是情况二),再推回git。

================= 补充 =================

不知道大家有没有看到 ASCII 表上第一个 NUL 字符,常见的用法是 find -print0 ... | xargs -0 .... 、perl -0 ....

伪换行符一个。

时间: 2024-11-08 20:38:03

换行符的话题 -- clwu的相关文章

搞了半天原来是DOS换行符的问题^M

今天在windows上的一个文件拷贝到Linux 系统中 没有注意到换行符的问题导致一个批处理始终有问题. 特别是通过记事本拷贝的文件 首先要通过cat -v file.txt 查看输入如下既有换行符的 UrrtIU56567=koiiH8IO188^M kymMPuAGuwBlqSWsWvK0^M ^M就是带的换行符号 $dos2unix -k killws 去掉换行符 $cat -v file.txt UrrtIU56567=koiiH8IO188 kymMPuAGuwBlqSWsWvK0

python 按每行读取文件怎么去掉换行符

python按每行读取文件后,会在每行末尾带上换行符,这样非常不方便后续业务处理逻辑,需要去掉每行的换行符,怎么去掉呢?看下面的案例: >>> a = "hello world\n" >>> print a #可以看到hello world下面空了一格 hello world >>> a.split() #通过split方法将字符转换成列表 ['hello', 'world'] #从列表中取第一个字符 >>> a.

Git中的AutoCRLF与SafeCRLF换行符问题

最近在使用GitHub,发现不时没有修改过的文件要提交,对比发现文件全部修改,但找不到不一样的地方.想可能是换行符的问题,因为Windows和Linux的换行符不一样,而Git默认应该是Linux的,今天Bing了下,果然是这个问题. CR回车 LF换行Windows/Dos CRLF \r\n Linux/Unix LF \n MacOS CR \r 解决方法是:打开命令行,进行设置,如果你是在Windows下开发,建议设置autocrlf为true.2014/08/20 补充:如果你文件编码

linux下与windows下的换行符

回车符号和换行符号产生背景 关于"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符.要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失.     于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符.一

windows下回车与换行符

windows下回车与换行符 从键盘输入的数据一般是ASCII码,也就是文本文件,在送到计算机内存时,回车和换行符转换成一个换行符(也就是说回车和换行符在windows文本中是两个字符),再从内存中以“wb”方式(二进制方式)输出到文件中,此时不发生字符转换,按内存中存储形式原样输出到磁盘文件中,当用“rb”方式(二进制方式)读入数据时,数据按原样输入,也不发生字符转换,直接读入到内存中,当用printf函数在屏幕上显示字符时,换行符又转换为回车加上换行符. 若以"r"方式(文本方式)

菜鸟教程之工具使用(八)——EGit禁止自动转换回车换行符

众所周知,Windows和Linux系统的回车换行是不一样的.想要进一步了解它们的可以阅读下面的介绍,不感兴趣的可以直接跳过. 产生背景 关于"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符.要是在这0.2秒里面,又有新的字符传过

Linux下的换行符\n\r以及txt和word文档的使用

Linux doc WINDOWS下记事本编写的文档和LINUX下VIM或者GEDIT等编写的文档的不同! 例如WINDOWS下编写的SH脚本,放到LINUX下执行可能会出错. 解决方法: 原因是:Windows下换行符号是“\r\n”,而linux下是“\n”没有”\r”,当shell文件是在Windows下编写的时候,所有的换行符都是“\r\n”,shell下是没办法执行这个文件的,会提示以上错误.请在ultraedit下将该文件执行“File->conversions->Dos to U

正则表达式匹配包括换行符的所有字符

今天在Java中想使用正则表达式来获取一段文本中的任意字符. (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符. 查出了一个解决办法,经过一试,果然可以匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则: ([\s\S]*)正则表达式匹配包括换行符的所有字符,布布扣,bubuko.com

shell替换和去掉换行符

用shell处理文件的时候我们常常需要去掉或者加上换行符,name问题就来了怎么才能快速的替换呢? 我们有这样一个文件 [[email protected] working]# cat 1 GD200A16C013493,GD200A16C013494,GD200A16C013495,GD200A16C013497 我们需要把逗号去掉,换成换行符可以这样做 [[email protected] working]# cat 1|sed 's/,/\n/g' GD200A16C013493 GD20