You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed替换CSV字段内的嵌套双引号为三个单引号?

解决方案

使用awk(推荐,更可靠)

awk处理CSV字段分割场景更直观,能精准定位每个字段内部的引号并完成替换:

BEGIN{FS="\",\""; OFS="\",\""} {for(i=1; i<=NF; i++) {gsub(/"/, "'''", $i)} print "\""$0"\""}

工作原理

  1. 字段分割:将输入行按","分割为多个字段,自动避开字段外的分隔符。
  2. 批量替换:遍历每个字段,把字段内所有的"替换为'''。
  3. 格式恢复:分割操作会去掉首尾的",输出时重新添加以保证CSV格式正确。

测试验证

  • 输入:"test","""","test" → 输出:"test","''''''","test"
  • 输入:"test","quotes "inside" quotes","test" → 输出:"test","quotes '''inside''' quotes","test"
  • 输入:"anything","inside "test" quotes","anything" → 输出:"anything","inside '''test''' quotes","anything"

使用sed(需循环处理)

如果必须用sed,需要通过循环匹配字段内的引号,确保所有嵌套或零散的引号都被替换:

sed -E ':loop s/("[^",]*?)(")([^",]*?")/\1'\'''\''\3/g; t loop'

工作原理

  1. 循环标签:loop定义循环入口。
  2. 非贪婪匹配:[^",]*?精准匹配字段内的字符(不包含字段分隔符),定位字段内部的"。
  3. 循环替换:每次替换一个字段内的"为''',t loop确保重复替换直到没有匹配项为止。

注意:该命令依赖sed的扩展正则支持(-E参数),GNU sed和BSD sed均支持,但部分老旧版本可能需要调整。

内容的提问来源于stack exchange,提问作者DFox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:20:13