在双引号内删除回车符

3

我有一个简单的文本文件,我正在尝试用shell脚本在bash中处理它,但是我一直遇到几个问题。

有一定数量的字段,其中一个字段是自由格式输入。

自由格式字段在双引号内有回车符,我想要删除它们。

格式类似于这样:

"0001","Barker","Bob","Free Form Text Here"
"0002","Barker","Jane", "Free Form
Text Here"

我尝试了以下三种解决方法,但都没有成功:
  1. tr '\r\n' '' // 删除所有换行符
  2. sed –e 's/\".*\n"//g' // 无效
  3. awk -v RS='"[^"]*"' -v ORS= '{gsub(/\n/, " ", RT); print $0 RT}' // 只返回逗号。
你有什么想法吗?只要解决方案可行,我就可以使用 sedawk

1
你做错的是试图使用不适合这项任务的工具来解析CSV文件。使用一种有可用CSV解析器的编程语言(如Python、Perl、Ruby等)。 - chepner
1个回答

4

使用 perl 更加简单:

perl -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file

"0001","Barker","Bob","Free Form Text Here"
"0002","Barker","Jane", "Free Form Text Here"

要实现内联保存更改,请使用以下方法:

perl -i -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file

当我尝试在一个大文本文件(+6MB)上运行这个Perl函数时,它的工作方式与在2到4行上的不同。有什么办法可以解决这个问题吗? - chipoglesby
尝试将以下与编程相关的内容从英文翻译成中文。请只返回翻译后的文本内容,并保存到文件中。 - anubhava
我昨天尝试了使用perl -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file > newFile,但似乎也没有起作用。 - chipoglesby
如果您可以在pastebin.com上提供一个可以重新创建问题的输入数据示例,那么我可以给出一些建议。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接