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

Linux下如何移除双引号内的逗号(保留分隔符逗号)

移除双引号包裹字段内的逗号(保留分隔符逗号)

解决方案1:使用awk(更可靠)

awk处理带引号的CSV字段逻辑更清晰,直接针对双引号内的内容处理:

awk -F'"' '{for(i=2;i<=NF;i+=2) gsub(/,/,"",$i)} 1' OFS='"' test.txt

命令解释:

  • -F'"':将双引号设置为字段分隔符,每行被拆分为「空字符串/分隔符段」和「双引号内的字段内容段」交替的结构。
  • 循环for(i=2;i<=NF;i+=2):只处理偶数索引的字段(这些正是双引号包裹的列内容),用gsub把字段内的所有逗号替换为空。
  • 1:awk的简写,代表执行默认操作——打印当前处理后的整行;OFS='"'确保输出时用双引号拼接字段,还原原格式。

解决方案2:使用sed

如果偏好sed,修正后的命令如下(注意直接用双引号而非HTML实体&quot;):

sed -E ':a; s/("[^"]*),([^"]*")/\1\2/; ta' test.txt

命令解释:

  • -E:启用扩展正则表达式,避免对括号转义。
  • :a:定义循环标签a。
  • s/("[^"]*),([^"]*")/\1\2/:匹配双引号内部的逗号(左边是双引号开头+非引号字符,右边是非引号字符+双引号结尾),直接移除该逗号。
  • ta:如果上一步替换成功,跳回标签a继续循环处理,直到当前行内没有双引号里的逗号为止。

你原来命令的问题

  1. 错误使用了HTML实体&quot;,shell环境中直接用双引号"即可;
  2. 你把逗号替换成了~,但需求是移除逗号,应该直接将匹配到的逗号替换为空;
  3. 原正则没有循环处理所有内部逗号,修正后的sed命令通过ta实现了循环替换。

验证示例

输入行:

"2022111812160156601777153","","","false","test1","here the , issue , that comma comma come inside the column"

执行命令后输出:

"2022111812160156601777153","","","false","test1","here the  issue  that comma comma come inside the column"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:10:21