IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置:首頁操作系統(tǒng)LINUX → 文件行尾奇怪的^M及解決

文件行尾奇怪的^M及解決

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  現(xiàn)象:

  按照《Unix shell 范例精解》試 sed 例子,用的是書自帶光盤里的文件 datafile。但是運行命令(以兩個數(shù)字結(jié)尾的行,將結(jié)尾兩個數(shù)字 ab 替換為 ab.5 )

  > sed 's/[0-9][0-9]$/&.5/' datafile

  卻沒有輸出,其中某一行最后數(shù)字是34,把上面 [0-9][0-9]$ 直接換成 34$ 依舊沒有輸出。 讓人一度以為在這個 Ubuntu 上 $ 元字符不能用。但是這是絕對不可能的,這年頭那個敢不支持 POSIX的正則表達式。

  繼續(xù)嘗試這個 $元字符,運行例子命令如下(結(jié)尾添加 **VACA**):

  > sed '/west/,/east/s/$/**VACA**/' datafile

  輸出如下:

  **VACA**t NW Charles Main 3.0 .98 3 34

  **VACA**    WE Sharon Gray 5.3 .97 5 23

  **VACA**t SW Lewis Dalsass 2.7 .8 2 18

  **VACA** SO Suan Chin 5.1 .95 4 15

  **VACA**t SE Patricia Hemenway 4.0 .7 4 17

  eastern EA TB Savage 4.4 .84 5 20

  northeast NE AM Main Jr. 5.1 .94 3 13

  north NO Margot Weber 4.5 .89 5 9

  central CT Ann Stephens 5.7 .94 5 13

  覺得 **VACA**t 后的那個 t 很可疑,難道是輸出時的覆蓋?因為沒有替換這個地方阿,再試試

  > sed '/west/,/east/s/$/**VA**/' datafile

  輸出如強烈地支持俺地懷疑,如下:

  **VA**est NW Charles Main 3.0 .98 3 34

  **VA**n WE Sharon Gray 5.3 .97 5 23

  **VA**est SW Lewis Dalsass 2.7 .8 2 18

  **VA**rn SO Suan Chin 5.1 .95 4 15

  **VA**ast SE Patricia Hemenway 4.0 .7 4 17

  eastern EA TB Savage 4.4 .84 5 20

  northeast NE AM Main Jr. 5.1 .94 3 13

  north NO Margot Weber 4.5 .89 5 9

  central CT Ann Stephens 5.7 .94 5 13

#p#副標題#e#

  于是來個重定向:

  >sed '/west/,/east/s/$/**VA**/' datafile > file

  > vim file

  顯示每行尾部都多了一個 ^M,于是手動刪除幾個 ^M,使呈以下樣子:

  northwest NW  Charles Main  3.0 .98 3   34**VA**      // 手動刪除 ^M 以驗證

  western    WE  Sharon Gray     5.3 .97 5   23**VA**      // 同上

  southwest      SW  Lewis Dalsass 2.7 .8  2   18**VA**      // 同上

  southern  SO  Suan Chin 5.1 .95 4   15^M**VA**  // 保留 ^M 以對比

  southeast SE  Patricia Hemenway   4.0 .7  4   17^M**VA**   // 同上

  eastern    EA  TB Savage 4.4 .84 5   20^M

  northeast NE  AM Main Jr.     5.1 .94 3   13^M

  north NO  Margot Weber  4.5 .89 5    9^M

  central     CT  Ann Stephens  5.7 .94 5   13^M

  保存推出后  cat file1, 屏幕顯示如下:

  northwest NW Charles Main 3.0 .98 3 34**VA**

  western WE Sharon Gray 5.3 .97 5 23**VA**

  southwest SW Lewis Dalsass 2.7 .8 2 18**VA**

  **VA**rn SO Suan Chin 5.1 .95 4 15

  **VA**ast SE Patricia Hemenway 4.0 .7 4 17

  eastern EA TB Savage 4.4 .84 5 20

  northeast NE AM Main Jr. 5.1 .94 3 13

  north NO Margot Weber 4.5 .89 5 9

  central CT Ann Stephens 5.7 .94 5 13

  證明猜測正確,只是這個 ^M 是什么東西呢?

  原因和解決方法:

  Google 之,得說法如下:

  Linux編輯器vim中刪除行尾的^M

  有時候,在 Linux 中使用打開曾在 Windows 中編輯過的文件時,會在行尾看到 ^M 字符?雌饋砜偸歉杏X很別扭。

  刪除方法如下:

  在 Vim 的命令模式中輸入 :%s/^M$//g 后,回車即會自動刪除該文件中的所有 ^M 字符。

  注意: ^M 要用 Ctrl + v,  Ctrl + m 來輸入, 用鍵盤直接敲^和M是不行的! 后面的 $ 代表匹配行尾的內(nèi)容,最后的 g 則表示每行中匹配到的內(nèi)容都要置換--全局替換,否則只替換每行中匹配到的第一個。

  又腳本刪除方法:

  cat file | col -b > file.1  // 這個可以去掉,但是生成文件里漢字變亂碼

  sed -e 's/.$//g'  file // 正確

  sed ‘s/^M//' file     // 正確,但是 ^M = Ctrl + v, Ctrl + m

  附錄:^M 另一個會出現(xiàn)的情況是文件在 windows 和 Linux 系統(tǒng)間通過 Ftp 傳送。這是建議方法是:強行設定 ftp 方式為 ascii 方式就可以了啊! 當然也可以通過軟件 dos2unix 搞定。// 我沒嘗試過哈。

  從現(xiàn)象到原因到解決方法如下。備份防遺忘。

  Tue,Jan/26/2010

關鍵詞標簽:Unix shell

相關閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠程會話使用screen管理你的遠程會話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠程桌面連如何登錄linux vps圖形界面 Linux遠程桌面連

相關下載

人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關機、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務器硬盤IO讀寫負載