Mysql SED删除角色的两个实例之间的所有内容
我和appr有一个数据库转储。6.0000行。 它们都是这样的: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} “包含大量字符的字符串”
{"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中