歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

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

現象:

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

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

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

  繼續嘗試這個 $元字符,運行例子命令如下(結尾添加 **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

  於是來個重定向:

  >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          &nb12下一頁

Copyright © Linux教程網 All Rights Reserved