如何使用 sed 或其他工具删除方括号和大括号内的字符串

How to use sed or something to remove strings within both square brackets and braces

我们现在有一些不常见的 CSV 数据文件,其中部分包含 JSON 数据类型,如下所示:

"00001","str1","[a.b.c] str3, str4",true,false,"2022-04-18T12:00:00+00:00","[{""k1"":""v1"",""k2"":""v2""}]","str5"

我们想删除方括号和大括号内的所有字符,这些字符稍后会合并在一起,没有其他更改。 但是,当我使用以下 sed 命令 sed -e 's/[.*]//g' 时,它 returns 不需要的输出如:

"00001","str1","","str5"

如果真的如期而至,应该是这样的:

"00001","str1","[a.b.c] str3, str4",true,false,"2022-04-18T12:00:00+00:00","","str5"

我们不知道如何捕获和替换包含 JSON 类型数据的部分,也找不到相关信息。

我们怎样才能做到这一点?

您当前的代码是从第一个 [ 到最后一个 ] 的贪婪匹配,因此删除了中间的所有内容并且似乎还有一个冗余的 g 标志。

试试这个 sed

$ sed 's/\[{[^]]*]//' input_file
"00001","str1","[a.b.c] str3, str4",true,false,"2022-04-18T12:00:00+00:00","","str5"

[{ 开始的带有花括号的方括号匹配到下一次出现的右方括号 [^]]*