4

我有很多以 classic 结尾的文件,这^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. 为什么?

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

4

2 回答 2

4

该字符与\rby匹配sed。采用:

sed -e "s/\r//g" input-file
于 2012-08-28T20:44:50.420 回答
1

就我而言,我必须这样做

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

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

于 2014-08-16T08:18:40.337 回答