2012-08-28 29 views
3

我有很多以經典^M結尾的文件,這是我Windows時代的一個工件。由於這是所有源代碼,git實際上認爲這些文件已更改,因此我希望徹底刪除這些令人討厭的行。使用sed替換很多文件中的Windows換行符 - 但它不是

這裏是我創建:

sed -i 's/^M//g' file 

但是,這並不工作。當然,我沒有輸入文字^M而是^V^M(ctrl V,ctrl M)。在vim它的工作原理(:%s/s/^M//g)和,如果我修改它是這樣的:

sed -i 's/^M/a/g' file 

它也適用,即,其端部的每一行與「A」。凡存在於filerandom_string

sed -i 's/random_string//g' file 

:它也能做到這一點。所以我可以用任何字符替換^M,我可以刪除線,但我不能刪除^M。爲什麼?

注意:重要的是它只是被刪除,不會被另一個不可見的字符替代。我也想避免雙重執行,並添加一個任意的字符串,然後刪除它。我想瞭解爲什麼這會失敗(但它不報告錯誤)。

+1

字符是否在行尾?如果是這樣可能會有所幫助:http://stackoverflow.com/questions/64749/m-character-at-end-of-lines – squiguy

+2

有什麼特別的原因,你想使用'sed'嗎?運行'dos2unix'似乎更容易。 (這就是說 - 你的'sed -i's/^ M // g'文件',用'^ V^M'來插入'^ M',對我來說很好。) – ruakh

+0

哦,我不知道關於這個工具。這可能會更容易,我會檢查它,謝謝! – javex

回答

3

該字符與的sed匹配。用途:

sed -e "s/\r//g" input-file 
+0

完美,該作品! – javex

1

對於我而言,我不得不這樣做

sed -e "s/\r/\n/g" filename.csv 

之後wc -l filename表現爲正確的輸出,而不是0線。