如何编写Sed正则忽略行尾空字段,修正CSV格式错误?
解决CSV字段双引号修正问题
要修正客户名字段的双引号错误,同时保留行尾的,""空字段,你可以用临时标记替换法,兼容性强且不依赖sed的高级正则特性:
sed -E 's/,""$/,TEMP_MARKER/g; s/"{2}/"/g; s/,TEMP_MARKER/,""/g' file.csv
原理说明:
- 第一步:把行尾的
,""替换成临时标记,TEMP_MARKER,避免后续替换操作影响它 - 第二步:把所有剩余的
""替换成",这会自动处理客户名字段的""Chandler, Huang Kun Kwek"",将其修正为"Chandler, Huang Kun Kwek" - 第三步:把临时标记换回原来的
,"",恢复行尾空字段的正确格式
如果你的sed版本支持PCRE(比如GNU sed 4.2及以上),也可以直接用正向前瞻正则,精准跳过行尾的"":
sed -E 's/"{2}(?!$)/"/g' file.csv
这个正则的逻辑是:仅匹配后面不是行尾的连续双引号,这样行尾的""会被自动排除,不会被修改。
内容的提问来源于stack exchange,提问作者C B
相关产品推荐
相关产品推荐

