专栏名称: 生信杂谈
生物信息学;生物信息;计算机辅助药物设计;测序分析;Python;R;机器学习;论文写作;网站制作;LOL;dota2。
目录
相关文章推荐
重庆日报  ·  重庆楼市迎来“开门红”! ·  22 小时前  
重庆日报  ·  重庆楼市迎来“开门红”! ·  22 小时前  
重庆日报  ·  创意视频|新春第一会 绘出新重庆新篇章 ·  昨天  
重庆日报  ·  创意视频|新春第一会 绘出新重庆新篇章 ·  昨天  
重庆市文化和旅游发展委员会  ·  重庆春节哪里人气最旺?这些地方排名前5→ ·  3 天前  
重庆市文化和旅游发展委员会  ·  重庆春节哪里人气最旺?这些地方排名前5→ ·  3 天前  
重庆之声  ·  重庆之声丨‍‍四天热销近9000万元 ... ·  4 天前  
第1眼新闻  ·  启动黄色预警!洪崖洞景区发布最新公告 ·  4 天前  
第1眼新闻  ·  启动黄色预警!洪崖洞景区发布最新公告 ·  4 天前  
51好读  ›  专栏  ›  生信杂谈

回车和换行在不同系统中的区别和匹配方式

生信杂谈  · 公众号  ·  · 2017-07-04 23:00

正文

以前还真没注意 回车 换行 有啥区别,直到。。。

那天我在windows下使用 notepad 下编辑一个小文本,用 notepad 的替换工具替换每一行的回车(大概是这个目的),我当时是用正则匹配的,结果用 \r \n 怎么都匹配不到我要的结果,心里非常疑惑,检查正则的其他部分,没问题啊。随后网上查了下,发现\r回车和\n换行是历史遗留问题,在三个主流系统里都不一样,在正则里也就不一样了,具体由来是这样的:

关于 “回车” (carriage return)和 “换行” (line feed)这两个概念的 来历和区别 。在计算机还没有出现之前,有一种叫做 电传打字机 (Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打 两个字符 。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是 在每行后面加两个表示结束的字符 一个叫做“回车” ,告诉打字机把打印头定位在左边界; 另一个叫做“换行” ,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵, 一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧
Unix 系统里,每行结尾 只有“” ,即 “\n” Windows 系统里面,每行结尾是 “ ” ,即 “\r\n” Mac 系统里,每行结尾是“ ”,即 “\r”
一个直接后果是, Unix/Mac 系统下的文件在 Windows 里打开的话, 所有文字会变成一行 而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。


下面我在windows里的notepad上举个例子:

下图是我要编辑的文件内容:


我想 在以"setosa"结尾的行后面再复制上一行的内容 ,预期结果是这样的:



我先使用正则为 (^.*setosa\r) 进行匹配替换,也就是只用 \r 匹配回车, \1\1 表示重复匹配到的结果。



结果如下:


嘿,好像匹配替换成功了啊,别急着高兴,你用记事本打开看看:



记事本结果显示复制是复制了,就是没换行。这是由于匹配到 \r 后直接复制本行的内容,并将本行的 \n 顶到了最后面,所以只在复制完后换行一次。


我们接着使用 \n 的正则 (^.*setosa\n) 进行匹配:



结果发现根本匹配不到,因为"setosa"后面还有个 \r ,匹配不到\r所以直接报错了:




windows







请到「今天看啥」查看全文