Linux下的文本dos格式轉Unix格式,去除^M符號

問:我在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 newwindows

範例以下:bash

$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
}
相關文章
相關標籤/搜索