【问题标题】:Removing line breaks from CSV exported from Google Sheets从 Google 表格导出的 CSV 中删除换行符
【发布时间】:2017-10-06 15:17:34
【问题描述】:

我有一些格式的数据:

-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 放在单引号中,以便按字面意思处理反斜杠,但它不起作用。没有错误,只是没有效果。

我在 Windows 上使用 Gitbash。

【问题讨论】:

  • 为什么不直接CLEAN 导出到csv 之前的数据?
  • 也许我误解了你的观点,但无论我在 Google 表格中做什么,它仍然会以带有行终止符的 CSV 格式出现,这就是问题所在。
  • 您没有将\r\n 放在单引号内,而是将它们从单引号中取出。听起来你只需要运行dos2unix

标签: sed google-sheets newline


【解决方案1】:

引号内的引号相互抵消,因此您实际上撤消了 sed 命令周围的引号以换行符。您可以转义 's|'\''\r\n'\''||g' 之类的引号,但这只会将它们包含在字符串中,这与您的情况不匹配。

但这不是唯一的问题; sed 默认只处理换行符之间的字符串。

如果您有 GNU 版本的sed,如果文件很大,可以留出 RAM,并且确定文件不包含带有空字符的数据,请尝试添加 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

【讨论】:

  • 非常感谢@svenper :这似乎有效,尽管一些文本编辑器似乎仍然认为有换行符,而另一些则没有。但是,根据 cat 和 file 命令,中断已经消失。
  • 您应该提到-z 会将整个输入文件读入内存,如果文件很大,这可能是不可取的。另外,我认为-z 仅适用于 GNU,因此如果属实,也应该说明这一点。
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多