【发布时间】:2019-11-28 11:21:10
【问题描述】:
在下面的文件中,我想用, 替换所有;,除了当有一个字符串(用两个" 分隔)时,它不应该替换其中的;。
示例: 输入
A;B;C;D
5cc0714b9b69581f14f6427f;5cc0714b9b69581f14f6428e;1;"5cc0714b9b69581f14f6427f;16a4fba8d13";xpto;
5cc0723b9b69581f14f64285;5cc0723b9b69581f14f64294;2;"5cc0723b9b69581f14f64285;16a4fbe3855";xpto;
5cc072579b69581f14f6428a;5cc072579b69581f14f64299;3;"5cc072579b69581f14f6428a;16a4fbea632";xpto;
输出
A,B,C,D
5cc0714b9b69581f14f6427f,5cc0714b9b69581f14f6428e,1,"5cc0714b9b69581f14f6427f;16a4fba8d13",xpto,
5cc0723b9b69581f14f64285,5cc0723b9b69581f14f64294,2,"5cc0723b9b69581f14f64285;16a4fbe3855",xpto,
5cc072579b69581f14f6428a,5cc072579b69581f14f64299,3,"5cc072579b69581f14f6428a;16a4fbea632",xpto,
对于 sed,我有:sed 's/;/,/g' input.txt > output.txt,但这将取代一切。
" 分隔字符串的正则表达式:\".*;.*\"。
(十六进制的正则表达式会更好——比如:[0-9a-fA-F]+)
我的问题是将它们结合起来制作一个 grep -o / sed 来替换除该模式之外的所有内容。
文件大小为两位数 Gb(最大 99Gb),因此为performance is important. Relevant。
感谢任何想法。
【问题讨论】:
-
是否可以接受两次通过的方法?
-
是的。只要它有效且速度快,我就会接受一切(乞丐不能成为选择者)。