我有一个带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最好做到这一点吗?或其他任何方法?
目前,我不在乎是否删除或替换了“ STRING WITH CHARACTERS”上的所有字符。 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
希望你能帮助我!
答案 0 :(得分:0)
当我对您提供的示例文本执行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 , ”
因此您可以看到“引号”是字节序列e2 80 9d,它是Unicode U + 201d(请参见https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128)
可能最简单的方法是简单地使用单字符通配符.
跳过这些Unicode字符
sed "s/certificate.:.*.certificate_code/certificate_code/"
不幸的是,sed似乎没有采用unicode \u201d
语法,因此其他一些答案建议使用十六进制序列(\xe2\x80\x9d)
-例如:Escaping double quotation marks in sed(但不幸的是,我没有还没有解决,我必须立即退出)
此答案说明了为什么会发生这种情况,并在您可能的情况下采取了一些补救措施:Unknown UTF-8 code units closing double quotes
答案 1 :(得分:0)
如果您使用的是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}