Windows和Unix下面的換行符問題
什麼是^M
^M符號是windows系統下的換行符,在windows下的文字通過bin模式ftp上傳到了unxi空間出現的,要去掉這些結束符,我們可以用dos2unix命令去掉,也可以直接在vi中操作去掉,實現方法如下:
如:在test.txt檔案中有如下內容:eeesdgtdfg dfgdfgfdgfd ^M
ineesert into pusfdgdfgfd)ff;^M
adwwfdfed adfdsdfsfdsf.^M
在命令模式下執行命令 :%s/^M//g 回車
注意:裡面的^M 必須是同時按 Ctrl+V+M ,表示回車,不是直接輸入 ^M,也不是粘帖複製。
命令完成後,用:x 儲存退出後,再次用vi開啟就全部被替換掉了。
dos2unix是Linux下的一個使用者轉換格式的程式,由於windows上檔案的結束符和linux上的不同,那麼在windows上編寫的檔案或者是指令碼在Linux上就會遇到類似於下面的錯誤:
?1 |
/bin/sh ^M:
bad interpreter: No such file
or directory
|
出現上述的錯誤真實因為結束符的不同,要解決上述問題,只需要轉換一下就行了
方法一:針對於單個檔案或少量檔案:
使用vi 編輯sh指令碼或者其他的指令碼檔案,然後按ESC進入vi的命令列模式,輸入下面的命令:
?1 |
: set
fileformat=unix |
當然如果要將檔案格式設定為dos檔案格式,也就是windows的格式,那麼輸入下面的命令就行了
?1 |
: set
fileformat=dos
|
修改完成後,使用下面的命令檢視檔案的格式型別:
?1 |
: set
ff
|
缺點:只適合少量檔案,當檔案數較多時,工作量巨大
方法二:批量更改linux檔案格式
和方法一類似的,Linux本身提供了dos2unix和unix2dos這兩個命令來實現windows和linux檔案的轉換,
但是。dos2unix和unix2dos本身沒有提供遞迴也就是批量修改的方式,這樣一來我們就需要藉助於xargs命令了
xargs的命令的作用就是將引數列表轉換成小塊分段傳遞給其他命令,藉助於xargs,我們可以很簡單的實現批量替換;
這裡假設我需要替換的檔案所在目錄為 /home/test目錄下,要更改檔案格式的字尾為.py ,那麼藉助於下面的命令就可以輕鬆的實現批量替換格式:
批量替換為linux檔案格式:
?1 |
sudo
find
/home/test
-name "*.py"
| xargs
dos2unix
|
批量替換為dos檔案格式:
?1 |
sudo
find
/home/test
-name "*.py"
| xargs
unix2dos
|
優點:批量替換,工作量小, 總的來說,方法二藉助於 管道符和xargs來實現的批量命令,將方法二修改一下就可以實現很多的批量操作,
比如:
1.批量刪除整個linux系統中字尾為.tmp的檔案;那麼命令可以這麼寫:
?1 |
sudo
find
/home/test
-name "*.tmp"
| xargs
rm
-f
|
2.刪除整個linux系統中與apache相關的檔案:
?1 |
sudo
find
/home/test
-name "*apache"
| xargs
rm
-rf
|
只要理解了xargs的功能。你會發現xargs的方便與快捷之處,這裡我也是拋磚引玉罷了