#1 Le 30/01/2016, à 16:52
- L'Africain
(Resolu) remplacer , par . entre chiffre
Bonjour,
J'essaye avec sed de remplacer les virgules par des points lorsqu'elles sont entre des chiffres, et au préalable s'il y a une espace après la virgule de la supprimer :
sed -i '/[0-9]\, [0-9]/s/ //g;/[0-9],[0-9]/s/,/./g' montexte
Voici un exemple de texte :
\s1 Bankâkâ ya Yezu
\r (Lc 3, 23-38)
\p
\v 1 Mukanda ke songa awa bankâkâ ya kele kisina ya Yezu, mwana ya David, mwana ya Abraham.
\v 6 Yessé butaka ntotila David. David butaka Salomon; mama ya Salomon vandaka ntete nkento ya Urie.\f + \fr 1.6: Mambu ya Tamar (v. 3) ke
Et voici le résultat que je souhaite (voir la deuxième ligne la virgule est devenue un point :
\s1 Bankâkâ ya Yezu
\r (Lc 3.23-38)
\p
\v 1 Mukanda ke songa awa bankâkâ ya kele kisina ya Yezu, mwana ya David, mwana ya Abraham.
\v 6 Yessé butaka ntotila David. David butaka Salomon; mama ya Salomon vandaka ntete nkento ya Urie.\f + \fr 1.6: Mambu ya Tamar (v. 3) ke
La commande que j'emploie est aléatoire sur certaines ligne c'est ok mais sur d'autre non. Voici le résultat que j'obtiens :
\s1 Bankâkâ ya Yezu
\r(Lc3.23-38)
\p
\v 1 Mukanda ke songa awa bankâkâ ya kele kisina ya Yezu, mwana ya David, mwana ya Abraham.
\v6YessébutakantotilaDavid.DavidbutakaSalomon;mamayaSalomonvandakantetenkentoyaUrie.\f+\fr1.6:MambuyaTamar(v.3)kemonikanaLuy38
Pour une raison inconnue sur la dernière ligne tous les espaces ont disparues !
Merci de votre aide.
Dernière modification par L'Africain (Le 31/01/2016, à 14:09)
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 30/01/2016, à 17:10
- Compte anonymisé
Re : (Resolu) remplacer , par . entre chiffre
Bonjour,
essayer ceci :
sed -i '/[0-9], [0-9]/s/, /./g;/[0-9],[0-9]/s/,/./g' montexte
Cordialement
Dernière modification par Compte anonymisé (Le 30/01/2016, à 17:14)
#3 Le 30/01/2016, à 18:01
- pingouinux
Re : (Resolu) remplacer , par . entre chiffre
Bonjour,
Ou bien
sed -ri 's/([0-9]), ?([0-9])/\1.\2/g' montexte
Hors ligne
#4 Le 31/01/2016, à 09:30
- L'Africain
Re : (Resolu) remplacer , par . entre chiffre
Bonjour à vous et merci pour votre aide.
La commande de Anonyme68 fonctionne à peu prêt bien. J'a encore trouvé un endroit où une virgule entre une lettre et un espace a été remplacée par un point. Par contre la commande de pingouinux semble fonctionner totalement. Pourriez-vous m'expliquer pourquoi la mienne ne fonctionne pas, et surtout pourquoi les vôtres fonctionnent!
@Anonyme68 Je comprends assez la commande mais ce que je ne comprend pas c'est pourquoi ça marche sous cette forme et pas sous la mienne.
@pingouinux je comprends pas le "?" dans la première partie de la commande et je ne comprends rien de la seconde partie de la commande.
Mes connaissances en sed sont très basiques comme vous le voyez, mais je ne demande qu'à apprendre.
Merci encore pour vos réactions très rapides. Hier j'ai un très mauvais signal, d'où ma réponse qui a traîné.
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#5 Le 31/01/2016, à 10:10
- pingouinux
Re : (Resolu) remplacer , par . entre chiffre
sed -i '/[0-9]\, [0-9]/s/ //g;/[0-9],[0-9]/s/,/./g' montexte
Ce que fait cette commande :
1) Dans les lignes qui contiennent au moins une séquence ", " entourée de 2 chiffres, supprimer toutes les espaces
2) Dans les lignes qui contiennent au moins une virgule entourée de 2 chiffres, remplacer toutes les virgules par un point
Ma commande en #3
sed -ri 's/([0-9]), ?([0-9])/\1.\2/g' montexte
Je remplace toutes les séquences constituées d'une virgule suivie de 0 ou 1 espace, et entourées de 2 chiffres par
\1 : le contenu de la 1ère parenthèse (1 chiffre)
un point
\2 : le contenu de la 2ème parenthèse (1 chiffre)
c? signifie : 0 ou 1 caractère c
Hors ligne
#6 Le 31/01/2016, à 14:07
- L'Africain
Re : (Resolu) remplacer , par . entre chiffre
Merci c'est très clair.
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne