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

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

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

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

  現(xiàn)象:

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

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

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

  繼續(xù)嘗試這個 $元字符,運(yùn)行例子命令如下(結(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 很可疑,難道是輸出時的覆蓋?因?yàn)闆]有替換這個地方阿,再試試

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

  輸出如強(qiáng)烈地支持俺地懷疑,如下:

  **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#副標(biāo)題#e#

  于是來個重定向:

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

  > vim file

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

  northwest NW? Charles Main? 3.0 .98 3?? 34**VA**????? // 手動刪除 ^M 以驗(yàn)證

  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 傳送。這是建議方法是:強(qiáng)行設(shè)定 ftp 方式為 ascii 方式就可以了啊! 當(dāng)然也可以通過軟件 dos2unix 搞定。// 我沒嘗試過哈。

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

  Tue,Jan/26/2010

關(guān)鍵詞標(biāo)簽:Unix shell

相關(guān)閱讀

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

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

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