原文網址:http://blog.csdn.net/kobejayandy/article/details/13291525
問:我在Windows中通過FTP傳一個文本文件到Linux中,但是打開文本文件后每行最后都有^M的標志。由於很長,用編輯器去除太麻煩,有什么解決辦法呢?
答:為了解決這個問題,Linux下專門有兩個工具可以互換Windows格式和Linux格式,它們分別是dos2unix和unix2dos。比如用下面的命令就可以將文件名為“filename”文件從Windows格式轉換為Linux文本格式。
正文:
在Linux下,不可避免的會用VIM打開一些windows下編輯過的文本文件。我們會發現文件的每行結尾都會有一個^M符號,這是因為 DOS下的編輯器和Linux編輯器對文件行末的回車符處理不一致,
對於回車符的定義:
Windows:0D0A
Unix/Linux: 0A
MAC: 0D
比較快捷的去除這些符號的方法有這么幾種:
(1)是用VI的命令:
使用vi打開文本文件
vi dos.txt
命令模式下輸入
:set fileformat=unix
:w
(2) VI下使用正則表達式替換
g/^M/s/^M//
或者
%s/^M//g
(3)使用sed 工具
sed ’s/^M//’ filename > tmp_filename
(4)既然window下的回車符多了‘ ’,那么當然通過刪除‘ ’ ,也可以實現:
tr -d " "
(5)最后一個方法是本人最常用的方法,個人覺得最方便
在終端下敲命令:
$ dos2unix filename
直接轉換成unix格式,就OK了!~
在網上又搜索到一篇將UNIX和WINDOWS間的換行轉換的文章,學習補充下:
語法
dos2unix [-kn] file [newfile] 從DOS轉換到UNIX
unix2dos [-kn] file [newfile] 從UNIX轉換到DOS也就是WINDOWS
-k : 保留該文檔原來的 mtime 時間 (不更新文檔上次內容經過修改的時間)
-n : 保留原來的文檔,將轉換后的內容輸入到新文檔中 例如: dos2unix -n old new
范例如下:
$cat -v killws #!/bin/bash^M admin_dir="/home/admin"^M function check_user {^M if [[ `whoami` != "admin" ]];then^M echo "Apache only can start by admin user,exit!"^M exit^M fi^M }^M $dos2unix -k killws dos2unix: converting file killws to UNIX format ... $cat -v killws #!/bin/bash admin_dir="/home/admin" function check_user { if [[ `whoami` != "admin" ]];then echo "Apache only can start by admin user,exit!" exit fi }