replace le motif entre deux caractères

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) 

la virgule sépare les différents éléments et dans chaque élément je veux supprimer tout entre et : y compris mais garder: comment puis-je faire cela? donc ça devrait ressembler

 Staphylococcus_sp_HMSC14C01:0.00371647154267842634,Staphylococcus_hominis_VCU122:0.00124439639436691308)69:0.00227646100249620856 

J'ai utilisé sed 's/-.*://' 1.file > 2.file mais sed 's/-.*://' 1.file > 2.file fini par supprimer le file entier et j'ai gardé les premières et dernières valeurs.

.* est une expression rationnelle gourmande, correspondant à la plus longue correspondance possible. Vous devez faire correspondre la correspondance la plus courte mais la faire correspondre globalement sur toute la ligne. essayer

sed 's/-[^:-]*:/:/g' 1.file > 2.file

La class de caractères [^:-] correspond à tout sauf les deux points et le tiret (et peut-être devrait correspondre à tout sauf les deux points), donc l'expression rationnelle indique "tiret suivi d'un nombre non-tiret, . Il remplace ensuite par un deux-points (puisque vous vouliez le garder) et effectue le rlocation globalement (le dernier g ) sur la ligne. Si vous omettez le g , seule la première instance sera remplacée.

Solution Awk :

 awk -F',' '{ for(i=1;i<=NF;i++) sub(/-[^:-]+/,"",$i) }1' OFS=',' 1.file 

  • -F',' – séparateur de champs

  • for(i=1;i<=NF;i++) – itération à travers tous les domaines de l'logging

  • sub(/-[^:-]+/,"",$i – substitue la séquence nécessaire ( entre et : y compris mais gardant:)


Le résultat:

 Staphylococcus_sp_HMSC14C01:0.00371647154267842634,Staphylococcus_hominis_VCU122:0.00124439639436691308)69:0.00227646100249620856,(Staphylococcus_sp_HMSC072E01:0.00288325234399461859,(((Staphylococcus_hominis_793_SHAE:0.00594391769091206796,Staphylococcus_pettenkoferi_1286_SHAE:0.00594050248317441135)