gpt4 book ai didi

regex - 删除虚假逗号

转载 作者:行者123 更新时间:2023-12-05 01:05:36 27 4
gpt4 key购买 nike

一个白痴客户正在生成 csv 文件,但一个字段有时在(描述字段)中有额外的逗号。

是否有一个整洁的正则表达式来查找这些不良记录并将多余的逗号替换为其他内容。 SED 命令行就可以了。

例子:

A,B,C,This is a description,D,E
F,G,H,This is a description with a comma (,) in it,D,E

我需要一个 SED,它可以判断行中有太多逗号,并从字段 4 中删除多余的逗号。

我们没有奢侈地告诉愚蠢的客户更改他们的代码。

已添加

我不会反对只删除 的解决方案。一个 我必须多次运行的虚假逗号。

最佳答案

方案一:单行,删除,在这里,您可以使用 SED 单线:

sed -r 's/([^,],[^,],[^,],)(.*)(,.+,.+)/\1'"$(sed -r 's/([^,],[^,],[^,],)(.*)(,.+,.+)/\2/' <<< $myInput | sed 's/,//g')"'\3/' <<< $myInput
您必须更换 <<< $myInput无论您的实际输入是什么。
当您使用 CSV 时,您可能需要调整(两次出现)正则表达式以匹配 CSV 表的每一行。
如果您的前三个和最后两个字段大于一个字符,请替换 [^,][^,]* .
解释 :
我们使用这个正则表达式
/([^,],[^,],[^,],)(.*)(,.+,.+)/
它为我们捕获字符串的第一个( F,G,H,)、第二个( .*)和最后一部分( ,D,E)。
第一个和第三个捕获组将保持不变,而第二个将被替换。
对于我们称之为 sed 的替换第二次(实际上是第三次)。首先我们只捕获第二组,其次我们替换每个 ,什么都没有(仅在捕获组中!)。
证明 :
enter image description here
当然,如果没有多余的逗号,则不会替换任何内容:
enter image description here

## 解决方案 2:整个文件,逐行,删除 `,` ##
如果您只想指定 **一个文件** 并且替换应该发生在您可以使用的文件的每一行
while read line; do sed -r 's/([^,],[^,],[^,],)(.*)(,.+,.+)/\1'"$(sed -r 's/([^,],[^,],[^,],)(.*)(,.+,.+)/\2/' <<< $line | sed 's/,//g')"'\3/' <<< $line; done < input.txt
在哪里 input.txt最后是 - 显然 - 你的文件。
我只是在 while 中使用上面的 SED 命令-循环读取文本的每一行。这是必要的,因为您必须跟踪正在阅读的行,因为您正在调用 sed。在同一输入上两次。
enter image description here

## 解决方案 3:整个文件,将字段包含在 `"` ##
正如 [@Łukasz L.][4] 在对 OP 的评论中指出的那样,根据描述 CSV 文件格式的 [RFC1480][5],最好将包含逗号的字段包含在 ` “`。
这比其他解决方案更简单:
sed -r 's/([^,],[^,],[^,],)(.*)(,.*,.*)/\1"\2"\3/' input.txt
我们再次拥有三个捕获组。这使我们可以简单地将第二组包装在 " 中。 !
enter image description here

关于regex - 删除虚假逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com