使用sed/awk匹配模式:在CSV字段末尾的双引号后插入空格
用 sed 处理带双引号转义的 CSV 字段替换需求
首先得明确你的场景:CSV 字段用双引号包裹、逗号分隔,字段内容里的双引号用两个双引号转义,现在要给内容最后是双引号的字段(包括空字段"")的结束双引号后加个空格,让字段以空格收尾。
解决方案
直接用这个 sed 命令就能搞定:
sed -E 's/""([,$])/"" \1/g' your_file.csv
为什么这个命令有效?
我们拆解下逻辑:
- 正则
""([,$])专门匹配两种核心场景:- 空字段的结尾:
""后面跟着逗号或行尾(对应空字段"") - 内容最后是双引号的字段结尾:因为这类字段的内容里最后一个双引号会被转义成
"",加上字段的结束双引号,就会出现""结尾(比如内容是abc"的字段会写成"abc""",结尾就是"")
- 空字段的结尾:
- 替换成
"" \1就是在匹配到的""后面插入空格,同时保留原本的逗号或行尾,不会破坏 CSV 的结构。
测试示例
拿你给的示例内容:
"123","def","","..."
用命令处理后会变成:
"123","def","" ","..."
如果有连续多个目标字段,比如"","","abc""",处理后会变成"" ,"" ,"abc"""(行尾的话就是"" ,"" ,"abc""" ),完美覆盖你说的连续字段场景。
注意事项
- 如果你的 CSV 里有非标准转义的双引号(比如直接用单个双引号而不是两个),这个命令可能不适用,得先把转义格式修正成标准 CSV 格式。
- 要是想直接修改原文件,可以加
-i参数(GNU sed):sed -i -E 's/""([,$])/"" \1/g' your_file.csv;macOS 上的 sed 需要写成sed -i '' -E 's/""([,$])/"" \1/g' your_file.csv。
内容的提问来源于stack exchange,提问作者user5568662
相关产品推荐
相关产品推荐

