我有一个带有 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.csv
but 删除字符串的地方\r\n
,而不是\r
or \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吗?