Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 Abra­ham.
\v 6 Yessé butaka ntotila David. David butaka Salomon; mama ya Salomon va­nda­ka 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 Abra­ham.
\v 6 Yessé butaka ntotila David. David butaka Salomon; mama ya Salomon va­nda­ka 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 Abra­ham.
\v6YessébutakantotilaDavid.DavidbutakaSalomon;mamayaSalomonva­nda­kantetenkentoyaUrie.\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

L'Africain #1 a écrit :
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