windows和linux下的換行符是不同的。一般操作系統(tǒng)上的運(yùn)行庫會(huì)自動(dòng)決定文本文件的換行格式. 如一個(gè)程序在windows上運(yùn)行就生成CR/LF換行格式的文本文件,而在linux上運(yùn)行就生成LF格式換行的文本文件. 在一個(gè)平臺(tái)上使用另一種換行符的文件文件可能會(huì)帶來意想不到的問題, 特別是在編輯程序代碼時(shí). 有時(shí)候代碼在編輯器中顯示正常, 但在編輯時(shí)卻會(huì)因?yàn)閾Q行符問題而出錯(cuò). 很多文本/代碼編輯器帶有換行符轉(zhuǎn)換功能, 使用這個(gè)功能可以將文本文件中的換行符在不同格式單互換.
在不同平臺(tái)間使用FTP軟件傳送文件時(shí), 在ascii文本模式傳輸模式下, 一些FTP客戶端程序會(huì)自動(dòng)對(duì)換行格式進(jìn)行轉(zhuǎn)換. 經(jīng)過這種傳輸?shù)奈募止?jié)數(shù)可能會(huì)發(fā)生變化. 如果你不想ftp修改原文件, 可以使用bin模式(二進(jìn)制模式)傳輸文本.
解決:在linux下用dos2unix filename轉(zhuǎn)換一次之后,成功解決問題。
dos2unix命令用來將DOS格式的文本文件轉(zhuǎn)換成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作為斷行標(biāo)志的,表示成十六進(jìn)制就是0D 0A。而Unix下的文本文件是以\n作為斷行標(biāo)志的,表示成十六進(jìn)制就是 0A。DOS格式的文本文件在Linux底下,用較低版本的vi打開時(shí)行尾會(huì)顯示^M,而且很多命令都無法很好的處理這種格式的文件,如果是個(gè)shell 腳本,。而Unix格式的文本文件在Windows下用Notepad打開時(shí)會(huì)拼在一起顯示。因此產(chǎn)生了兩種格式文件相互轉(zhuǎn)換的需求,對(duì)應(yīng)的將UNIX格 式文本文件轉(zhuǎn)成成DOS格式的是unix2dos命令。
常用參數(shù):
將DOS格式文本文件轉(zhuǎn)換成Unix格式,最簡單的用法就是dos2unix直接跟上文件名。
格式:dos2unix file
如果一次轉(zhuǎn)換多個(gè)文件,把這些文件名直接跟在dos2unix之后。(注:也可以加上-o參數(shù),也可以不加,效果一樣)
格式:dos2unix file1 file2 file3
格式:dos2unix -o file1 file2 file3
上面在轉(zhuǎn)換時(shí),都會(huì)直接在原來的文件上修改,如果想把轉(zhuǎn)換的結(jié)果保存在別的文件,而源文件不變,則可以使用-n參數(shù)。
格式:dos2unix oldfile newfile
如果要保持文件時(shí)間戳不變,加上-k參數(shù)。所以上面幾條命令都是可以加上-k參數(shù)來保持文件時(shí)間戳的。
格式:dos2unix -k file
格式:dos2unix -k file1 file2 file3
格式:dos2unix -k -o file1 file2 file3
格式:dos2unix -k -n oldfile newfile
注:unix2dos命令的使用方式與dos2unix命令的類似。
![](/d/20211018/b250d4b300f98f898d6929cb6c10b38e.gif)
cat -v可以看到文件中的非打印字符,而不帶-v參數(shù)的cat命令不行。
hexdump -C可以看到文件每個(gè)字節(jié)的十六進(jìn)制表示。