Mysql SED删除角色的两个实例之间的所有内容

Mysql SED删除角色的两个实例之间的所有内容,mysql,linux,sed,vi,Mysql,Linux,Sed,Vi,我和appr有一个数据库转储。6.0000行。 它们都是这样的: {"student”:”12345”,”achieved_date":1576018800,"expiration_date":1648677600,"course_code”:”SOMECODE,”certificate”:”STRING WITH A LOT OF CHARACTERS”,”certificate_code”:”ABCDE,”certificate_date":1546297200} “包含大量字符的字符串”

我和appr有一个数据库转储。6.0000行。 它们都是这样的:

{"student”:”12345”,”achieved_date":1576018800,"expiration_date":1648677600,"course_code”:”SOMECODE,”certificate”:”STRING WITH A LOT OF CHARACTERS”,”certificate_code”:”ABCDE,”certificate_date":1546297200}
“包含大量字符的字符串”是一个包含大约600.000个字符的字符串(!)

我需要删除每行上的字符。。。我试过:

sed 's/certificate\":\"*","certificate_code//'
但它似乎没有起作用

我在这里也找不到工作的答案,所以请联系你,希望你能帮助我。。这最好用SED来完成吗?还是其他方法

现在,我不在乎是否删除了“包含大量字符的字符串”上的所有字符,或者用I.E.0替换,即使这样对我来说也是可行的;)

od-xc filename | head
的输出为:

0000000    2d2d    4d20    5379    4c51    6420    6d75    2070    3031
          -   -       M   y   S   Q   L       d   u   m   p       1   0
0000020    312e    2033    4420    7369    7274    6269    3520    372e
          .   1   3           D   i   s   t   r   i   b       5   .   7
0000040    322e    2c39    6620    726f    4c20    6e69    7875    2820
          .   2   9   ,       f   o   r       L   i   n   u   x       (
0000060    3878    5f36    3436    0a29    2d2d    2d0a    202d    6f48
          x   8   6   _   6   4   )  \n   -   -  \n   -   -       H   o
0000100    7473    203a    3231    2e37    2e30    2e30    2031    2020
          s   t   :       1   2   7   .   0   .   0   .   1

希望你能帮助我

当我对您提供的示例文本执行
od
命令时,输出包括:

0000520      454d    4f43    4544    e22c    9d80    6563    7472    6669
           M   E   C   O   D   E   ,   ”  **  **   c   e   r   t   i   f
0000540      6369    7461    e265    9d80    e23a    9d80    5453    4952
           i   c   a   t   e   ”  **  **   :   ”  **  **   S   T   R   I
0000560      474e    5720    5449    2048    2041    4f4c    2054    464f
           N   G       W   I   T   H       A       L   O   T       O   F
0000600      4320    4148    4152    5443    5245    e253    9d80    e22c
               C   H   A   R   A   C   T   E   R   S   ”  **  **   ,   ”
0000620      9d80    6563    7472    6669    6369    7461    5f65    6f63
          **  **   c   e   r   t   i   f   i   c   a   t   e   _   c   o
0000640      6564    80e2    3a9d    80e2    419d    4342    4544    e22c
           d   e   ”  **  **   :   ”  **  **   A   B   C   D   E   ,   ”
因此,您可以看到“引号”是字节序列E280 9d,即unicode U+201d(请参阅)

最简单的方法可能是使用单字符通配符
跳过这些unicode字符

sed "s/certificate.:.*.certificate_code/certificate_code/"
不幸的是,sed似乎没有采用unicode
\u201d
语法,因此其他一些答案建议使用十六进制序列
(\xe2\x80\x9d)
-eg:(但不幸的是,我还没有做到这一点,现在必须注销)


这个答案解释了为什么会发生这种情况,如果在您的情况下可能会采取一些补救措施:

如果您正在使用
bash
,请尝试以下操作:

q=$'\xe2\x80\x9d'
sed "s/certificate${q}:${q}.*${q},${q}certificate_code//" file
结果:

{"student”:”12345”,”achieved_date":1576018800,"expiration_date":1648677600,"course_code”:”SOMECODE,””:”ABCDE,”certificate_date":1546297200}

sed的/\(“证书”:“\)[^”]*“/\1”/“file>outputfile
?当我在键盘上点击双引号时,我得到了这样的信息:“这是ASCII代码34。但是,双引号“在示例文本中,不是此字符,而是各种unicode字符,例如。如果这是文件中的实际内容,这将解释为什么sed命令不匹配-为了确认,您是否可以编辑问题以显示命令输出的前几行
od-xc filename | head
将输出添加到主问题thnx中