1. 程式人生 > >Windows檔案換行符轉Linux換行符

Windows檔案換行符轉Linux換行符

      前段時間,有個朋友碰到由於Windows的換行符和Linux換行符不一樣,導致程式編譯不通過。這個問題之前自己也碰到過,網上資料也蠻多,不過還是藉此總結總結,因為發現總結+實踐的方式能夠讓自己更好的提升。

作業系統檔案換行符

      首先介紹下,在ASCII中存在這樣兩個字元CR(編碼為13)和 LF(編碼為10),在程式設計中我們一般稱其分別為'\r'和'\n'。他們被用來作為換行標誌,但在不同系統中換行標誌又不一樣。下面是不同作業系統採用不同的換行符:

  • Unix和類Unix(如Linux):換行符采用 \n
  • Windows和MS-DOS:換行符采用 \r\n
  • Mac OS X之前的系統
    :換行符采用 \r
  • Mac OS X:換行符采用 \n

Linux中檢視換行符

      在Linux中檢視換行符的方法應該有很多種,這裡介紹兩種比較常用的方法。

      第一種使用"cat  -A [Filename]" 檢視,如下圖所示,看到的為一個Windows形式的換行符,\r對應符號^M\n對應符號$.

        

     第二種使用vi編輯器檢視,然後使用"set list"命令顯示特殊字元:

      

      咦,細心的朋友發現了,怎麼^M還是沒顯示出來,這裡也是給大家提個醒,用VI的二進位制模式(“vi -b [FileName]”)開啟,才能夠顯示出^M

      

Windows換行符轉換為Linux格式

      下面介紹三種方法,選擇哪一種看自己喜好,當然你也可以選擇第x種,^_^。

      (1)第一種使用VI: 使用VI普通模式開啟檔案,然後執行命令"set ff=unix" 則可以將Windows 換行符轉換為Linux換行符,簡單吧!命令中ff的全稱為file encoding

      (2)使用命令"dos2unix",如下所示

[[email protected] test]# dos2unix gggggggg.txt 
dos2unix: converting file gggggggg.txt to UNIX format ...
      (3)使用sed命令刪除\r字元: 
[[email protected] test]# sed -i 's/\r//g' gggggggg.txt 

多檔案處理換行符轉換

      通常我們都會有一批檔案需要替換,比如一個目錄的都要替換,我自己寫了一個簡單的指令碼去遍歷目錄和子目錄下的所有檔案,並且將其轉換為Linux換行格式。程式碼如下:

#!/bin/sh

#CheckInput
#Check Whether the input is valid
#0 means not valid
CheckInput()
{
	ret=1;

	#Check the number of parameter
	#And Check whether the argument is a folder
	if [ $# -lt 1 ]	
        then
		echo "Please use the command like ./dos2u.sh [Folder]";
		ret=0
	elif [ ! -d $1 ]
	then
		echo "Please use an invalid Folder as the shell argument";
		ret=0
	fi
	
	return $ret;
}

#TraverseFolder
#Traser all the files under the folder
TraverseFolder()
{	
	oldPath=`pwd`
	cd $1;
	for file in `ls`
	do
		if [ -d $file ]
		then 
			TraverseFolder $file;
		else
			#echo $file;
			#sed -i 's/\r//g' $file
			dos2unix $file
		fi	
	done
	cd $oldPath;
}

CheckInput $*
if [ $ret -ne 1 ]
then
	exit -1
fi

TraverseFolder $1

      這個就純當練習了,應該可以用更簡單的方式去解決,比如find命令+dos2unix命令,小夥伴們可以自己試一試。我這麼寫 主要目的是為了 以後有其他需求更便於擴充套件,當然還有一些bug要修改啦~~~~^_^。

參考

1. How To Convert Files from Linux/Unix Format to Windows and Vice Versa:

https://www.maketecheasier.com/convert-files-from-linux-format-windows/

2. Difference Between \n and \r?

http://stackoverflow.com/questions/1761051/difference-between-n-and-r

3. 美國資訊交換標準程式碼

http://baike.baidu.com/view/492542.htm