我有很多文件以经典^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或其他东西替换。我还想避免双重执行并添加任意字符串并在之后删除它。我想理解为什么会失败(但它不报告错误)。
答案 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行。