Window和Linux的换行符之战Windows换行符
在早期的打印機(jī)時(shí)代,開始新的一行要占用兩個(gè)字符的時(shí)間。如果到了一行的結(jié)尾處,想要快速回到下一行的開頭,需要打印兩個(gè)不可見字符,否則打印可見字符會(huì)在紙面上留下污點(diǎn)。
解決換行問題的辦法就是:用一個(gè)字符來移到第一列,另一個(gè)字符來新增一行,也就是用 "\r\n" 來表示換行。
計(jì)算機(jī)產(chǎn)生以后,存儲(chǔ)較為昂貴,而且換行是個(gè)最常見的操作,在如何解決回車換行這個(gè)老問題上,人們產(chǎn)生了不同的意見。
Unix的粉絲認(rèn)為,到達(dá)一行的結(jié)尾時(shí)新增一個(gè) 來表示換行,即用 "\n" 來表示換行;而Mac的人則認(rèn)同 的解決辦法,Window則堅(jiān)持古老的的方法,延續(xù)使用 "\r\n" 來表示換行。
三大操作系統(tǒng)各自為戰(zhàn),誰也不服誰,從而導(dǎo)致了分裂,這就意味著如果你將一個(gè)文件從一個(gè)系統(tǒng)轉(zhuǎn)移到另一個(gè)系統(tǒng),就面臨著回車換行的問題。
由于Windows風(fēng)格的換行使用 "\r\n",如果把這樣的文件上傳到 Unix/Linux,不能識(shí)別 "\r",所以顯示時(shí)在行尾會(huì)出現(xiàn) ^M 出來。使用 cat -A 選項(xiàng)查看文本所有的字符,如下所示:
[root@localhost ~]# cat -A world.sh
[root@localhost ~]# Hello World^M$
說明一下,cat -A等價(jià)于:cat -vE,其命令參數(shù)的含義為:
-v:使用^和M表示不可打印字符
-E:在每行結(jié)束處顯示$
備注:很多人誤以為$是換行符,其實(shí)它不是換行符n的表示。
去除 "^M" 符號(hào),有以下三種最常用的方法:
(1)cat -A a.txt | tr -d '^M' > b.txt
shell的 tr 命令用于轉(zhuǎn)換或刪除文件中的字符。tr 指令從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),經(jīng)過字符串轉(zhuǎn)換后,將結(jié)果輸出到標(biāo)準(zhǔn)輸出設(shè)備。-d:刪除指令字符
(2)$ dos2unix filename
此方法是很多人最常用的方法,也是最方便的方法。
(3)sed -i 's/\r//' world.sh
備注:內(nèi)容源自《趣談shell》,解密Linux江湖故事,用非線性思維學(xué)習(xí)shell,讓天下沒有難學(xué)的shell。
總結(jié)
以上是生活随笔為你收集整理的Window和Linux的换行符之战Windows换行符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法-排序-插入排序
- 下一篇: PDF文件怎么转换成图片图片怎么转换成P