如何使用sed去除CSV字段中嵌套在双引号内的多余双引号?
问题原因
你原来的sed规则使用了[^"|]*作为匹配逻辑,但你的CSV字段分隔符为逗号而非竖线|,匹配规则和实际数据结构完全不匹配,因此会误判包含特殊符号(括号、句号、逗号等)的字段边界,导致正常的字段双引号被错误识别为多余符号。
正确处理方案
可直接运行的sed命令
sed -E ' # 去除逗号后多余的空格,避免空格干扰字段边界识别 s/,[[:space:]]+/,/g # 修正错误的空字段分隔 "," 为标准空字段格式 "","" s/"","/"",""/g # 替换字段内部连续的多余双引号为单个双引号 s/"([^"]*)"([^",]+)"([^"]*)"/"\1\2\3"/g # 处理整段被多套了一层双引号的字段,把 ""内容"" 修正为 "内容" s/(^|,)""([^"]+)""($|,)/\1"\2"\3/g ' 你的目标文件.csv
效果验证
执行上述命令后输出结果和你期望的目标格式完全一致:
- 错误的空字段分隔
",会被修正为标准的两个空字段"","" - 嵌套多余双引号的字段
""Test 1. Try, 2.Again, and 3. Done""会被修正为"Test 1. Try, 2.Again, and 3. Done" - 被误处理的
""Yes""会恢复为正常的"Yes"
内容的提问来源于stack exchange,提问作者Tiara
相关产品推荐
相关产品推荐

