我有一些格式的数据:
-e, 's/,Chalk/,Cheese/g'
-e, 's/,Black/,White/g'
-e, 's/,Leave/,Remain/g'
在文件data.csv。
中使用Gitbash,我使用file命令发现这是带有CRLF终止符的ASCII文本。如果我也使用命令cat -v,我在Gitbash中看到每一行结束^ M。
我想删除那些终结符,留下一行。
我尝试过以下方法:
sed -e 's/'\r\n'//g' < data.csv > output.csv
注意将\ r \ n放在单引号中,以便按字面处理反斜杠,但它不起作用。没有错误,只是没有效果。
我正在使用Gitbash for Windows。
答案 0 :(得分:1)
引号内的引号互相取消,因此您实际上撤消了换行符中sed命令的引号。您可以转义's|'\''\r\n'\''||g'
之类的引号,但这只会将它们包含在字符串中,这与您案例中的任何内容都不匹配。
但这不是唯一的问题;默认情况下,sed
仅处理换行符之间的字符串。
如果您拥有sed
的GNU版本,如果文件很大,并且确保该文件不包含空字符的数据,那么请尝试添加the -z
argument,例如:
sed -z -e 's|\r\n||g' < data.csv > output.csv
虽然我猜你可能也想用逗号替换它:
sed -z -e 's|\r\n|,|g' < data.csv > output.csv
对于非GNU版本的sed
,您可以更轻松地使用tr
,例如:
tr '\r\n' ',' data.csv > output.csv