使用sed替换许多文件中的Windows换行符 - 但事实并非如此

时间:2012-08-28 20:38:28

标签: linux sed

我有很多文件以经典^M结尾,这是我Windows时代的一件神器。由于这是所有源代码,git实际上认为这些文件已经更改,所以我想一劳永逸地删除那些讨厌的行。

这是我创造的:

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”结束每一行。它也可以这样做:

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

random_string中存在file的位置。所以我可以用任何字符替换^M,我可以删除行,但我无法删除^M。为什么呢?

注意:重要的是它只是被移除,不会被另一个不可见的char或其他东西替换。我还想避免双重执行并添加任意字符串并在之后删除它。我想理解为什么会失败(但它不报告错误)。

2 个答案:

答案 0 :(得分:3)

该字符与\r sed匹配。使用:

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

答案 1 :(得分:1)

对于我的情况,我必须做

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

之后wc -l filename显示正确的输出而不是0行。