如何使用 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"
从 [{
开始的带有花括号的方括号匹配到下一次出现的右方括号 [^]]*
我们现在有一些不常见的 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"
从 [{
开始的带有花括号的方括号匹配到下一次出现的右方括号 [^]]*