si vous voulez parler de colonnes et connues séparées par un espace, faites comme suit:
sed -E 's/^(([^ ]* ){3})POS=.*;GINFO=/\1/' infile
Cela ^(([^ ]* ){3})
correspond à partir de la mendicité de la ligne ^
pour tout ce qui *
n'est pas un espace [^ ]
jusqu'à un premier espace vu et le répéter pour un {3}
temps maximum ; Les parenthèses font de cette correspondance une correspondance de regroupement avec une référence arrière \1
dont nous revenons plus tard en pièce de remplacement s/pattern/replace/
.
Cela (...)POS=.*;GINFO=
correspond également à ce qui est POS=
suivi par tout .*
ce que vous voyez jusqu'à ce ;GINFO
que cela soit supprimé
Pour les exemples de données donnés ci-dessous:
1 10241 POS=rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
Retournera un résultat:
1 10241 POS=rs960927773 DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 DDX11L1:100287102;R5;ASP
La version POSIXly pourrait être:
sed 's/^\([^ ]* \)\([^ ]* \)\([^ ]* \)POS=.*;GINFO=/\1\2\3/' infile