LF :Linefeed,对应ASCII中转义字符\n ,0x0A(asc码是10) 指的是“换行” \n是把光标置于下一行的同一列
CRLF:Carriage Return &Linefeed,\r\n , 0x0D + 0x0A ,指的是回车换行 \r\n把光标置于下一行行首
^M的原因 : ^M 注意要用 Ctrl + V Ctrl + M 来输入
Dos、Windows 格式的文件,用 0D 0A (CR+LF)作为换行符,而Unix 的则是以0A(LF) 作为换行符.所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 0D(CR) 显示为 ^M,在linux中vim中无法显示\r
因为ascii中对应的不是linux中的标准acsii字符,其实其对应的ASCII码十进制形式是: 13 (无显示形式)对应的八进制形式 15 (显示为^M)从二进制层面来理解,即可以删除换行符前面对应的字符字节(我瞎编的,应该对的),在字符层面直接删除^M这个字节即可
方法1:
在命令模式下:输入:%s/^M//g 然后,回车即可替换
注,其中”^M”的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的
方法2:
使用vi打开文本文件
vi dos.txt
命令模式下输入
:set fileformat=unix
:w
方法3:
使用sed 工具
sed ’s/^M//’ filename >tmp_filename
方法4:
既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:
tr -d ‘\r’
或者:
sed -i 's/\r//' startup.sh
window下默认是 \r\n
linux下是\n
unix下是\r
现在, 我们看看本文开头部分的问题。 假设有一个linux下的unix.txt文件, 那么, 它在文件中的换行标志是:\n, 现在把unix.txt拷贝靠Windows上, 那好啊, Windows那双犀利的眼神仿佛是在对unix.txt文件说: 别跟我整什么\n, 我只认识文件中的\r\n, 如果你这个unix.txt文件里面有\r\n, 那我就认为是换行符, 否则, 我不认你。 如此一来, Windows压根就找不到unix.txt中的\r\n, 所以, 对于Windows而言, 压根就没有发现unix.txt有任何换行, 所以, 我们从Windows上看到的unix.txt文件显示在一行里面。
转义字符\n和\r只有一个区别:就是换行方式不同。
\n 软回车:
在Windows 中表示换行且回到下一行的最开始位置。相当于Mac OS 里的 \r 的效果。
在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
\r 软空格:
在Linux、unix 中表示返回到当行的最开始位置。
在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。
例如:
代码
print u"你好吗?\n朋友"print u"——分隔线——"print u"你好吗?\r朋友"
输出结果:
你好吗?
朋友
——分隔线——
朋友吗?
扩展资料
正确理解转义字符\
strlen与sizeof的意义:
sizeof是C/C++中的一个关键字,不是函数,简单的说其作用就是返回一个对象或者类型所占的内存字节数。
strlen()是一个函数,求一个字符串的有效长度,strlen函数的结束条件是遇到\0结束计数。
用sizeof求一个字符串分为几种情况:
1、\后面一般跟的是八进制数如 \000 \377 \378
2、\也可跟16进制如\x11 \xff
3、\后面跟的字符如\a \A \8
如下字符串举例:
"\0000" 可以看成\000 0 \0 ,sizeof 值为3,第一个\000代表ascii第一个元素(NULL空 *** 作),第二个0是字符0,最后红色的\0是系统自带\0(他实际也是\0,\00,\000 也就是ASCII所代表的第一个元素NULL)用于结束字符串。所以sizeof就是3。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)