linux不识别 r n,Linux /r /n

声明:所有文章只作为学习笔记用,转载非原创

Windows系统中有如下等价关系:

用enter换行 <====> 程序写\n  <====> 真正朝文件中写\r\n(0x0d0x0a) <====>程序真正读取的是\n

linux系统中的等价关系:

用enter换行 <====> 程序写\n  <====> 真正朝文件中写\n(0x0a)  <====> 程序真正读取的是\n

CR :Carriage Return,对应ASCII中转义字符\r ,0x0D(asc码是13) 指的是“回车”   \r是把光标置于本行行首

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文件显示在一行里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值