在linux下,去除^M,將windows格式文件(dos文件)改為unix格式文件
在Windows系統(tǒng)下編輯的文件,換行符回車的格式為'\r\n',在linux系統(tǒng)下,回車的格式為'\n',在Windows下編輯的文本文件在上傳至linux服務器時,回車'\r\n'就顯示成^M+'\n'。
在Windows環(huán)境下,用ultraedit或者notepad plus都有相應的選項可以將Windows下的文本格式文件轉(zhuǎn)換成unix格式文件。比如:notepad plus中“編輯”—>“檔案格式轉(zhuǎn)換”—>“轉(zhuǎn)換為UNIX格式”。
在Linux下面,一般有三種方式來轉(zhuǎn)換文件:
1.使用dos2unix工具
一般的分發(fā)版本中都帶有這個小工具(如果沒有可以根據(jù)下面的連接去下載),使用起來很方便:
$ dos2unix myfile.txt
該命令會去掉行尾的^M。
2.用vi修改文件
如果文件是在windows環(huán)境下創(chuàng)建并編輯的,文件中所有的換行符都是'\r\n',vi會在打開文件時識別出該文件是dos格式,此時不會顯示^M,在命令行模式下輸入:set fileformat=unix,然后保存即可。
如果文件中的換行符有些是為'\r\n',有些是'\n',在vi顯示文件時,為'\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,是一個字符,不是兩個字符。(I 制表符也是如此。)
替換后,如果去看那些內(nèi)容,你會發(fā)現(xiàn)還沒替換掉,但是如果你:x 保存退出后,再次用vi打開就發(fā)現(xiàn)他們已經(jīng)完全被替換掉了。
如果碰到有提示:E486: Pattern not found: M,單文件中實際存在M,比如用"cat -v"或"cat -A"查看時,這種情況應該是因為文本中每行都是'\r\n'結(jié)尾,vi自動用dos模式打開,這樣就看不到^M,這時候直接用:set fileformat=unix就可以了。
3.用sed命令修改
$ sed -e 's/^M/\n/g' myfile.txt
^M = Ctrl+v,Ctrl+m