如何从文件中删除所有 \r\n,但保留 \n

如何从文件中删除所有 \r\n,但保留 \n

我有一个带有 unix 行结尾的 CSV,但某些字符串值中包含 windows 行结尾:

date,notes\n
2014-01-01,"Blah Blah Blah"\n
2014-01-02,"Two things:\r\n  - first thing\r\n  - second thing\n
2014-01-03,"Foo"\n

请注意, \n 和 \r 仅显示文件中不可打印字符的位置,而不是在文本编辑器中打开它时的外观。

我想删除 \r\n 的实例,但保留实际的行结尾,即 \n。输出应如下所示:

date,notes\n
2014-01-01,"Blah Blah Blah"\n
2014-01-02,"Two things:  - first thing  - second thing\n
2014-01-03,"Foo"\n

我需要类似tr -d '\r\n' file.csvbut 删除字符串的地方\r\n,而不是\ror \n

如果我尝试处理它,sed它会像逐行处理时那样处理,所以它实际上不起作用:

date,notes
2014-01-01,"Blah Blah Blah"
2014-01-02,"Two things:\r
  - first thing\r
  - second thing
2014-01-03,"Foo"

答案1

Perl 处理转义序列,包括\n换行符,比旧的 Unix 工具更全面。

perl -pe 's/\r\n//g'

答案2

您是否尝试过替换为sed

sed 's/\\r\\n//g' -i file.csv

答案3

你必须转义反斜杠,即

tr -d '\\r\\n' file.csv

应该管用。

答案4

你考虑过使用dos2unix吗?

相关内容