Bonjour,
Je cherche une expression régulière avec la commande sed pour transformer la chaine suivante :
2018;16;15;c;1;2;3 en 2018;16;15;c 1 2 3
par avance merci
Bonjour,
Je cherche une expression régulière avec la commande sed pour transformer la chaine suivante :
2018;16;15;c;1;2;3 en 2018;16;15;c 1 2 3
par avance merci
# C'est le genre de question qu'il faut poser en forum…
Posté par lasher . Évalué à 7.
Ceci étant dit, il y a plusieurs façon de faire. Par exemple :
(Comme tu parles d'une chaîne spécifique, je donne une solution spécifique)
[^] # Re: C'est le genre de question qu'il faut poser en forum…
Posté par Colin Pitrat (site web personnel) . Évalué à 6.
Je préfère :
sed 's/2018;16;15;c;1;2;3/2018;16;15;c 1 2 3/'
# Sed
Posté par TESTU . Évalué à -5.
merci pour ton retour mais j ai juste donné un exemple le c peut etre suivi des nombre d'un ou plusieurs chiffres exemple c;20191;6;53534;67777…
# Facile
Posté par THE_ALF_ . Évalué à 5.
De rien.
# SED
Posté par TESTU . Évalué à -5.
la chaine peut evoluer c'est pas fixe c;1;2;3 paut etre dans un autre cas c,201771;53535;3;5
je veux une solution qui marche pour tous les cas.
merci
[^] # Re: SED
Posté par celedhrim . Évalué à 9.
Moi je veux un million de dollars !
[^] # Re: SED
Posté par TESTU . Évalué à -1.
Tu l'auras en betcoins :)
[^] # Re: SED
Posté par Sytoka Modon (site web personnel) . Évalué à 2.
Compte créé le 17/04/2018…
Cela sent l'exercice ton truc…
Je dirais qu'il faut utiliser les () pour choper les nombres. Très facile à faire en Perl et en sed puisque presque pareil dans ce cas là.
[^] # Re: SED
Posté par lasher . Évalué à 2.
J'avais commencé à faire une réponse plus générique, mais comme effectivement la question sentait l'exercice (et avec le recul, au vu des questions supplémentaires qui ressemblent plus à des exigences), j'ai préféré donner une solution « littérale » pour la chaîne donnée.
# Solution
Posté par AP . Évalué à 10.
... | sed 's/;/ /4g'
J'aurai appris un truc sur sed au passage. Cool. :) Le switch "g" précise de remplacer toutes les occurrences de ";" par des " " mais on peut moduler le g et ici le "4g" signifie "à partir de la 4ème occurrence du motif". J'étais parti sur un équivalent en perl mais qui faisait plusieurs lignes…
# Pourquoi seulement sed ?
Posté par damaki . Évalué à 1. Dernière modification le 17 avril 2018 à 14:02.
C'est possible à faire en sed, mais ce sera avec une regex usine à gaz. La logique voudrait que tu splittes la chaîne en 2 autour de la chaîne ;c; avec un outil de ton choix (cut, awk ou en bash pur), puis que t'appliques un "sed 's/\;/ /g'" bête et méchant sur la partie de droite.
Alors oui, je pourrais te pondre la regex horrible qui marche direct avec sed, mais hormis un exercice de style j'ai du mal à voir l'intérêt.
[^] # Re: Pourquoi seulement sed ?
Posté par Sytoka Modon (site web personnel) . Évalué à 2.
Non le pb n'est pas compliqué donc ce n'est pas une regex horrible ;-)
À noter en passant que Perl5 permet de mettre des espaces et des commentaires dans les regex et que Perl6 ré-invente les regex en repartant d'une copie vierge.
# Le tuto de la mort en français
Posté par Nodeus . Évalué à 3. Dernière modification le 17 avril 2018 à 16:33.
Un lien vers l'explication que tu cherches
http://www.funix.org/fr/unix/expr-sed.htm
Donne un poisson à un homme tu le nourriras un jours ; apprend lui à pêcher tu le nourriras toute sa vie.
# hum
Posté par M.Poil (site web personnel) . Évalué à 2.
La longueur du début est-elle fixe ?
Peux tu transformer ton exemple en regex ([0-9]{4};[0-9]{2};[0-9]{2};[a-z]….) ?
Bref donne nous une pseudo analyse du format en entrée plutôt qu'un seul exemple.
Is it a Bird? Is it a Plane?? No, it's Super Poil !!!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.