2012-11-23 76 views
4

一個非常普遍的問題,但是我無法用sed解決它。sed -e's/^ M/d'不能正常工作

我有一個腳本文件(一批命令),說myfile.txt立即執行創建一個列表。現在當我執行批處理操作時,我的命令行界面清楚地顯示它無法解析命令,因爲換行^M正在每行的末尾加起來。

我認爲sed是去了解它。我最好的方式嘗試:

sed -e 's/^M/d' myfile.txt > myfile1.txt 
    mv myfile1.txt myfile.txt 

它沒有工作。我也嘗試這樣做,也沒有工作:

sed -e 's/^M//g' myfile.txt > myfile1.txt 
    mv myfile1.txt myfile.txt 

後來我想可能是sed正在它作爲行的開頭一個字符M,因此沒有結果。所以我嘗試過:

sed -e 's/\^M//g' myfile.txt > myfile1.txt 
    mv myfile1.txt myfile.txt 

但是沒有變化。我正在做一個基本的錯誤嗎?請注意,因爲我在sed不好。

我發現了一個決議,雖然這是在vi編輯器,並在命令模式下執行該打開文件:

:set fileformat=unix 
    :w 

但我想它在sed爲好。

+1

這不是你直接詢問的:除了sed,dos2unix也是這樣做的。你的問題意味着你不瞭解它。 UNIX有很多工具,這是一個非常單一的目的工具。 –

回答

9

^M並非字面意思^M。將^M替換爲\r。您可以使用相同的表示法tr;這兩個命令都除去回車:

tr -d '\r' <input.txt> output.txt 
sed -e 's/\r//g' input.txt > output.txt 
+0

它爲我工作,你的第二個方法:) – mzalazar

1
sed -e 's/^M/d' myfile.txt 

具有以下含義[同爲/ \^M /]:如果該行的第一個字母是M,則刪除行,否則打印並傳遞給下一個。。你必須在s [earch命令]中插入2個分隔符/ old/new /。

This可能會幫助你。