在linux下,去除^M,將windows格式文件(dos文件)改為unix格式文件
在Windows系統(tǒng)下編輯的文件润梯,換行符回車的格式為'\r\n',在linux系統(tǒng)下甥厦,回車的格式為'\n'纺铭,在Windows下編輯的文本文件在上傳至linux服務(wù)器時(shí),回車'\r\n'就顯示成^M+'\n'刀疙。
在Windows環(huán)境下舶赔,用ultraedit或者notepad plus都有相應(yīng)的選項(xiàng)可以將Windows下的文本格式文件轉(zhuǎn)換成unix格式文件。比如:notepad plus中“編輯”—>“檔案格式轉(zhuǎn)換”—>“轉(zhuǎn)換為UNIX格式”谦秧。
在Linux下面竟纳,一般有三種方式來轉(zhuǎn)換文件:
1.使用dos2unix工具
一般的分發(fā)版本中都帶有這個(gè)小工具(如果沒有可以根據(jù)下面的連接去下載),使用起來很方便:
$ dos2unix myfile.txt
該命令會去掉行尾的^M疚鲤。
2.用vi修改文件
如果文件是在windows環(huán)境下創(chuàng)建并編輯的锥累,文件中所有的換行符都是'\r\n',vi會在打開文件時(shí)識別出該文件是dos格式集歇,此時(shí)不會顯示^M桶略,在命令行模式下輸入:set fileformat=unix鹰祸,然后保存即可圆裕。
如果文件中的換行符有些是為'\r\n',有些是'\n'得运,在vi顯示文件時(shí)姑蓝,為'\r\n'將會顯示為^M然后換行鹅心。這種情況可以直接用vi的替換功能。
":%s/^M//g" 替換所有的^M
":%s/^M$//g" 替換行尾的^M
":%s/^M/[ctrl-v]+[enter]/g" 將^M替換成回車
":%s/^M/\r/g" 將^M替換成回車
在命令中纺荧,M的輸入方式是Ctrl+v旭愧,Ctrl+m颅筋,是一個(gè)字符,不是兩個(gè)字符输枯。(I 制表符也是如此议泵。)
替換后,如果去看那些內(nèi)容用押,你會發(fā)現(xiàn)還沒替換掉肢簿,但是如果你:x 保存退出后靶剑,再次用vi打開就發(fā)現(xiàn)他們已經(jīng)完全被替換掉了蜻拨。
如果碰到有提示:E486: Pattern not found: M,單文件中實(shí)際存在M桩引,比如用"cat -v"或"cat -A"查看時(shí)缎讼,這種情況應(yīng)該是因?yàn)槲谋局忻啃卸际?\r\n'結(jié)尾,vi自動用dos模式打開坑匠,這樣就看不到^M血崭,這時(shí)候直接用:set fileformat=unix就可以了。
3.用sed命令修改
$ sed -e 's/^M/\n/g' myfile.txt
^M = Ctrl+v,Ctrl+m