正则表达式 – 删除虚假逗号
白痴客户正在生成csv文件,但有一个字段有时会在(描述字段)中有额外的逗号.
是否有一个整洁的正则表达式来找到这些不良记录并用其他东西替换额外的逗号. SED命令行没问题. 例: A,B,C,This is a description,D,E F,G,H,This is a description with a comma (,) in it,E 我需要一个SED,可以告诉该行中有太多逗号,并从字段4中删除多余的逗号. 我们没有告诉愚蠢的客户改变他们的代码的奢侈. 添加 我不反对只删除一个我必须多次运行的虚假逗号的解决方案. 解决方法
解决方案1:单行,删除,
在这里你使用SED单行: sed -r 's/([^,],[^,)(.*)(,.+,.+)/1'"$(sed -r 's/([^,.+)/2/' <<< $myInput | sed 's/,//g')"'3/' <<< $myInput 你必须替换<<< $myInput,无论您的实际输入是什么. 说明: /([^,.+)/ 它为我们捕获字符串的第一个(F,),第二个(.*)和最后一个部分(,E). 证明: 当然,如果没有不需要的逗号,则不会替换任何内容: 解决方案2:整个文件,逐行删除, 如果您只想指定一个文件,那么您可以使用该文件的每一行进行替换 while read line; do sed -r 's/([^,.+)/2/' <<< $line | sed 's/,//g')"'3/' <<< $line; done < input.txt 最后的input.txt是 – 显然 – 你的文件. ? 解决方案3:整个文件,将字段括在“ 正如@?ukasz L.在对OP的评论中指出的那样,根据描述CSV文件格式的RFC1480,最好将包含逗号的字段包含在“. sed -r 's/([^,.*,.*)/1"2"3/' input.txt 我们再次拥有三个捕获组.这允许我们简单地将第二组包装成“! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |