我有一个csv数据文件,其中的数据采用以下结构:
abc^"a detail explaination"^cde^"another detail explaination"^date
然而,由于用户输入,一些细节输入了换行符,并且打破了程序。我需要在双引号"
我尝试使用sed
命令,但它没有改变它,我尝试的命令是:
sed -e :1 -e 's@\(".*\)\n\(.*"\)@\1\\2@;t1' file.csv > file_changed.csv
我正在尝试做的标准是替换封装在2个双引号之间的换行符\n
,因为这是csv的格式。
任何人都知道我的sed
命令有什么问题?或者还有其他更好的方法来实现这一目标吗?
修改
附加说明,我无法删除所有换行符,因为我需要将它们保留在行尾,因为这是一个用于导入目的的csv文件。只需要删除那些封装在双引号中的内容
答案 0 :(得分:1)
sed ':cycle^J/^\([^"]*"[^"]*"\)*[^"]*"[^"]*$/ {N;s/\n//;b cycle^J}' file.csv > file_changed.csv
在具有任意数量的打开和关闭"
+ 1 "
的每一行上,添加下一行,删除换行并重新测试。
打印生成的行并转到下一个
答案 1 :(得分:-1)
如果足够,您可以使用:tr -d '\n'
删除所有\n
。