如何用sed移除双引号字符串内的逗号?现有命令未生效
处理CSV字符串中双引号内的逗号问题
需求说明
原始字符串:
1,2,3,"test1,test2,test3",4,5,6
需要将双引号内的逗号全部删除,得到:
1,2,3,"test1test2test3",4,5,6
原命令错误分析
你执行的命令sed -i -e "s/,"([^,"]*)"//g" test.txt存在两个核心问题:
- 正则逻辑错误:该命令试图匹配
",xxx"格式的内容并替换为空,完全偏离了删除引号内逗号的需求; - 语法错误:sed默认使用基础正则,未加
-E参数时括号()需要转义,否则会被当作普通字符处理,导致匹配失效。
正确的sed命令
使用扩展正则配合循环替换,确保引号内所有逗号都被删除:
sed -i -E ':loop s/("[^",]*),([^"]*")/\1\2/g; t loop' test.txt
命令解释
-E:启用扩展正则表达式,无需转义括号;:loop:定义循环标签,用于重复执行替换操作;s/("[^",]*),([^"]*")/\1\2/g:精准匹配双引号内的单个逗号,将其替换为空(保留引号内的其他内容);t loop:如果上一次替换成功,跳转到loop标签继续执行,直到引号内无逗号可替换为止。
内容的提问来源于stack exchange,提问作者SeungCheol Han
相关产品推荐
相关产品推荐

