Ahm*_*afa 5 sed text-processing bioinformatics
Staphylococcus_sp_HMSC14C01-KV792037.1:0.00371647154267842634,Staphylococcus_hominis_VCU122-AHLD01000058.1:0.00124439639436691308)69:0.00227646100249620856,(Staphylococcus_sp_HMSC072E01-KV814990.1:0.00288325234399461859,(((Staphylococcus_hominis_793_SHAE-JUSR01000051.1:0.00594391769091206796,Staphylococcus_pettenkoferi_1286_SHAE-JVVL01000037.1:0.00594050248317441135)
Run Code Online (Sandbox Code Playgroud)
逗号分隔不同的项目,在每个项目中,我想删除之间-
和:
包括-
但保留的所有内容:
。
我怎样才能做到这一点?所以它应该看起来像:
Staphylococcus_sp_HMSC14C01:0.00371647154267842634,Staphylococcus_hominis_VCU122:0.00124439639436691308)69:0.00227646100249620856
Run Code Online (Sandbox Code Playgroud)
我使用sed 's/-.*://' 1.file > 2.file
但最终删除了整个文件,只保留了第一个和最后一个值。
.*
是一个贪婪的正则表达式,匹配最长的可能匹配。您需要匹配最短的匹配,但在整行上全局匹配。尝试
sed 's/-[^:-]*:/:/g' 1.file > 2.file
字符类[^:-]
匹配除冒号和破折号以外的任何内容(也许它应该只匹配除冒号以外的任何内容),因此正则表达式表示“破折号后跟任意数量的非破折号、非冒号字符后跟一个冒号”。然后它用冒号替换它(因为你想保留它)并g
在行上进行全局替换(尾随)。如果省略g
,则只会替换第一个实例。