正则表达式忽略结束行之前的字符串

问题描述 投票:0回答:1

我的 CSV 文件如下所示:

"08d43c37-9b43-4030-b1db-558f8bc89d52","0007661355","cus_7luwjohxnnlujhwinhvhtmzc4y","[email protected]",""Chandler, Huang Kun Kwek"","08d43c37-9b43-4030-b1db-558f8bc89d52","src_mh255jar4y2eta6jfpgmocgqda","379186","0144","22","08","9A1219C06AEFEA42097ABE1E2911B5579C61E51BBB720FF658B35822B336E840",""

我的工作是将它们加载到数据库表中,但客户名称的格式不正确。用我的 sed 表达

sed -E 's/"{2}/"/g;t' <<< file.csv

,我可以改变

,""Chandler, Huang Kun Kwek"",

进入这个

,"Chandler, Huang Kun Kwek",

问题是这会将我行末尾的

,""
剥离为
,"
并破坏我的负载。最右边的字段 90% 的时间都是空的,并用双引号括起来,但偶尔会有数据。

我尝试像这样添加否定前瞻,但它不起作用:

sed -E 's/"{2}(?!^,""$)/"/g;t' <<< file.csv

我认为问题在于我如何进行替换。我的正则表达式应该是什么来忽略每条记录末尾的

,""

regex sed
1个回答
0
投票

不要逆流而上,只需恢复尾部双引号即可:

sed -E 's/"{2}/"/g;t' | sed -E 's/,"$/,""/'
© www.soinside.com 2019 - 2024. All rights reserved.