如何从双引号csv字段的内部为stip逗号编写sed脚本(或awk,只是不熟悉它)?我可以用下面的sed一行删除一个逗号:
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
但如果字段中有两个逗号,只有一个逗号被去掉:
aloha,inc.,一家公寓协会
变成
aloha,inc.公寓协会
或者,如果有人能向我解释为什么在将csv加载到mysql时,我不能使用“optional enclosed by”选项,这将使生活变得简单得多(我一直在尝试使用sed去掉逗号,因为逗号会破坏我的列数据,即使我使用可选的封闭选项,并且我的字段是双引号)。excel导出时仅在带逗号的字段周围加引号。如果每样东西都是双引号,我没有问题,但有选择性地引用,我开始把我的鞋撞在table上。
更新:文件包含多个字段。
“aloha,inc.,一家公寓协会”,900,venice,fl,34293-5112,venice,fl,34285,aloha
我甚至担心可能有行有多个引用字段,这似乎是一个严重的问题。但据我所知,这并不常见。
有一件事我只是在想,我可以消除所有的例子,'公司',但这不会消除其他的例子,如'有限责任公司',等等。
我要删除字段中的所有逗号。
我担心这样的情况:
“aloha,inc.,公寓协会”,900,venice,fl,34293-5112,venice,fl,34285,“aloha,inc.,公寓协会”
阿罗哈的第一个示例和最后一个示例之间的逗号不是用
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
2条答案
按热度按时间wljmcqd81#
如果要删除
"
至"
那么下面的内容可能会对你有所帮助。使用
sed -i
选项,以防您要将输出保存到输入文件本身。9ceoxa922#
你可以用gnu-awk来处理这个案子
perl -pe 's/"[^"]+"/$&=~tr|,||dr/ge' ip.txt