歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> 文件行尾奇怪的^M及解決

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

日期:2017/3/2 16:34:57   编辑:Linux服務器

現象:

  按照《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