2014-06-05 21:12:54 mxdlove00 阅读数 5197
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20503 人正在学习 去看看 马永亮
不同操作系统,文本文件的行尾符是有区别的。

1. 各系统关于行尾符(End-of-Line)的规定

     Unix每行结尾为"\n",
     Windows系统每行结尾是“\r\n”, 
     Mac OS在 OS X以前每行结尾是"\r", 现在每行结尾是 "\n".

2. 概念区分

中文名 英文名 英文缩写 英文解释 C语言中表示 ASCII码
回车
carriage return CR return \n 0x0a
换行 line feed LF new line \r 0x0d


3. 回车与换行来历

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

4. 编程相关

在Windows系统中,文本文件以" \r\n"代表换行
     用fputs等函数写换行符'\n'时,Windows会将'\n'隐式转换为"\r\n",然后再写入到文件中。
     用fgets等函数读换行符'\n'的时候,Windows会将文件中的"\r\n"隐式转换为'\n',然后再读到变量中。

5. 实例分析 

生成一个包含换行(\n, 0x0A)和回车(\r, 0x0D)组合的文本
     $ echo -en '1\n2\r\n3' > temp
             
十六进制方式查看文本:
     $ xxd temp
      
     
Linux中查看文本:
     $ xxd -r temp
     $ vim temp
     
Windows中查看文本:
     


6. 不同平台间文本文件转换

    编辑器实现转换。
          NotePad++/Ultra Edit/Sublime Text2提供了转换功能。
    用Linux命令实现转换。
         Windows到Unix      $ sed -e 's/.$//' mydos.txt > myunix.txt
         Unix到Windows      $ sed -e 's/$/\r/' myunix.txt > mydos.txt
  用Linux命令实现转换。 
    $ unix2dos filename 
$ dos2unix filename

2018-12-07 21:23:24 xww19910214 阅读数 69
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20503 人正在学习 去看看 马永亮

在window环境下,代码的默认回车符是CRLF,而在linux环境下要求代码是LF作为回车符的,因此当我们把windows中的代码直接在linux环境下编译时就会出现错误。一般如果文件比较少的话,可以通过notepad++打开.c文件,将回车符从CRLF切换成LF。如图所示。
在这里插入图片描述
而在linux环境下时LF作为结尾符的。如下图时转为unix格式。
在这里插入图片描述
切换的方法是在菜单中选择编辑-文档格式转换-转换为unix格式。

2018-10-15 14:26:04 TheManOfCoding 阅读数 64
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20503 人正在学习 去看看 马永亮

一、正则表达式匹配空行

根据文档格式(windows, mac, linux行尾符)不同 将其中的\r\n替换成不同行尾符

windows: ^(\s*)\r\n

linux: ^(\s*)\n

mac: ^(\s*)\n (mac 也是一种类linux系统)

方法二: 模式修饰符

/.*/s   其中的 /s修改点号的匹配范围, 使之可以匹配换行符

二、正则表达式匹配不包含某些字符串

正则表达式匹配公式为:^((?!XXX).)*$,XXX为字符串。

三、匹配最后出现的某个字符串

c(?=((?!c).)*$)
匹配最后一个出现的字符c

四、利用正则表达式获取两者之间的内容

一般来说大家平时用正则表达式都是得到带有匹配内容的结果,比如说other?content!other 用\?(.*?)! 匹配的结果就是 ?content! 是带有"?!"的。如果我想只得到content那应该怎么写呢? 那就要用到零宽断言里的(?<=exp)(?=exp)
关于(?<=exp)(?=exp)的介绍如下:

(?=pattern)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?<=exp),也叫零宽度正回顾后发断言
格式:(?<=pattern2)pattern1
匹配这样的字符串
a)字符串本身匹配pattern1
b)字符串前面的内容匹配pattern2

如果概括的去理解(不一定完全符合原理),就是content(?=pattern)就是得到符合后面跟着pattern的content,(?<=pattern2)content 就是得到前面跟着pattern2的content。两个一起用的话就匹配到那些前面符合pattern2后面跟着pattern的content。

于是我们得到正则表达式

(?<=\?)[\s\S]*(?=\!)

 

后续会继续补充。

2011-04-19 23:30:00 cmhummer 阅读数 1120
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20503 人正在学习 去看看 马永亮

在Linux下的换行是/n,而在Windows下的换行是/r/n。不经过处理的话,两者的文件在显示的时候会出现问题,比如一个Linux的文本文件 用Windows记事本打开的时候不会换行格式很乱,一个Windows文件在Linux下用VI打开的话会出现^M字符

 

windows文本文件用回车符和换行符的组合/r/n来表示行尾。

linux/unix换行符为/n

Mac文本文件用/r表示行尾

 

C程序使用一个/n来表示行尾,所以,如果C程序以文本视图模式处理一个windows文本文件,在读取文件时它会将/r/n转换成/n,在写入文件的时候会将/n转化成/r/n.

如果使用二进制视图,将不发生任何映射。

下面这个程序用于处理/r/n和/r的转换的问题

2010-02-19 10:45:00 fisher_jiang 阅读数 1124
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20503 人正在学习 去看看 马永亮

windows 下的文本行尾标示符是“/r/n”, 而 linux 下则是“/n”, 所以从windows下拷贝到linux 下的脚本经常会遇到下面的问题:

 

“cannot create directory 'foo/r': File exists

 

 用下面的命令可以去掉“/r"

tr -d '/r' < original_file > modified_file

去除空行

阅读数 233

没有更多推荐了,返回首页