dos2unix替換方案

在linux下,去除^M,將windows格式文件(dos文件)改為unix格式文件

在Windows系統下編輯的文件,換行符回車的格式為'\r\n',在linux系統下,回車的格式為'\n',在Windows下編輯的文本文件在上傳至linux服務器時,回車'\r\n'就顯示成^M+'\n'。

在Windows環境下,用ultraedit或者notepad plus都有相應的選項可以將Windows下的文本格式文件轉換成unix格式文件。比如:notepad plus中“編輯”—>“檔案格式轉換”—>“轉換為UNIX格式”。

在Linux下面,一般有三種方式來轉換文件:

1.使用dos2unix工具

一般的分發版本中都帶有這個小工具(如果沒有可以根據下面的連接去下載),使用起來很方便:
  $ dos2unix myfile.txt
  該命令會去掉行尾的^M。

2.用vi修改文件

如果文件是在windows環境下創建并編輯的,文件中所有的換行符都是'\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 制表符也是如此。)

替換后,如果去看那些內容,你會發現還沒替換掉,但是如果你:x 保存退出后,再次用vi打開就發現他們已經完全被替換掉了。

如果碰到有提示:E486: Pattern not found: M,單文件中實際存在M,比如用"cat -v"或"cat -A"查看時,這種情況應該是因為文本中每行都是'\r\n'結尾,vi自動用dos模式打開,這樣就看不到^M,這時候直接用:set fileformat=unix就可以了。

3.用sed命令修改

$ sed -e 's/^M/\n/g' myfile.txt

^M = Ctrl+v,Ctrl+m

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容