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 18/05/2015, à 08:48

L'Africain

(Résolu) Substitution d'espace impossible avec sed

Bonjour,
J'ai un problème assez bizarre, j'écris un script pour mettre tout les chiffres d'un fichier à la ligne, d'habitude ça fonctionne sans problème. Mais là à certains moments sur le chiffre 1 précédé d'un espace et suivi d'un espace  ma commande sed ne s'applique pas dessus, j'ai essayé la substitution dans gedit et libreoffice, même problème .Lorsque je fais rechercher " 1 ", à certains endroits il ne reconnait pas l'espace de fin comme un espace!!!
Voici un extrait du texte en question :

1 1 Yai luyantiku ya Nsangu ya mbote ya ke tadila Yezu, Kristu, Mwana ya Nzambi *.
Yoani Mbotiki ke yita Yezu
(Mt 3,1-6.11-12; Lc 3,1-6.15-18)
2 Na mukanda ya profeta Izaya, bo sonikaka nde:  Tala! Mono ke tinda ntumwa na mono na ntwala na nge, sambu na kuyidikila nge nzila.
3 Ndinga mosi me wakana na kati ya nseke.

et la commande que je lui passe:

sed -i 's/ [0-9] /\n&/g'

Comme vous le voyez tout les chiffres se mettent bien à la ligne sauf le deuxième 1? J'ai cherché du côté des différents types d'espace, mais j'ai pas trouvé grand chose. Pour info ces fichiers textes viennent de quark et ont été converti en txt (ut-8).
Merci pour votre aide

Dernière modification par L'Africain (Le 21/05/2015, à 20:14)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 18/05/2015, à 10:02

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

Bonjour,
Chez moi, ta commande fait bien ce que tu veux. Elle n'agit d'ailleurs que sur le deuxième 1.

Hors ligne

#3 Le 18/05/2015, à 10:19

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Ben comme j'ai fait un copier coller c'est ce que je craignais... En fait je pense savoir la cause mais pas comment la résoudre, il semble que les espaces qui précède et suivent ce fameux 1 sont des espace de type demi-cadratin. Car le chiffre qui précède le 1 dans le texte original est un numéro de chapitre. Il est donc probable qu'on lui ai mis ce type d'espace, mais je ne trouve pas les références unicode de l'espace cadratin ni comment les transformer en espace normal!
Merci déjà pour ton aide!


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#4 Le 18/05/2015, à 10:21

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

Ah oui, dans ce cas ça peut jouer.
Et si tu fais un copier-coller uniquement de cet espace dans ta commande sed, ça ne fonctionne pas ?

(le copier-coller sur le forum c'est normal que ça ne fonctionne pas, ces couillons de navigateurs remplacent toutes les espaces par des espaces simples, dans les formulaires)

Hors ligne

#5 Le 18/05/2015, à 10:23

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

Pour voir ce que contient réellement le fichier, peux-tu donner le retour de

hd ton_fichier_d_origine

Tu peux ne montrer que les quelques lignes concernées.

PS : Tu as posté ton message initial en double

Hors ligne

#6 Le 18/05/2015, à 11:02

gl38

Re : (Résolu) Substitution d'espace impossible avec sed

Chez moi le deuxième1 va à la ligne. Comment procèdes-tu ?
Cordialement,
Guy

Hors ligne

#7 Le 18/05/2015, à 11:57

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Et si tu fais un copier-coller uniquement de cet espace dans ta commande sed, ça ne fonctionne pas ?

J'avais cru un moment mais non, ou c'est aléatoire...

e copier-coller sur le forum c'est normal que ça ne fonctionne pas, ces couillons de navigateurs remplacent toutes les espaces par des espaces simples, dans les formulaires

Et si je convertissais mes fichiers texte en html puis de nouveau en txt, ça enlèverais tout ces espaces bizarres?
Pour la commande hd voici le résultat des 3 premiers versets:

00000000  20 31 20 31 20 20 59 61  69 20 6c 75 79 61 6e 74  | 1 1  Yai luyant|
00000010  69 6b 75 20 79 61 20 4e  73 61 6e 67 75 20 79 61  |iku ya Nsangu ya|
00000020  20 6d 62 6f 74 65 20 79  61 20 6b 65 20 74 61 64  | mbote ya ke tad|
00000030  69 6c 61 20 59 65 7a 75  2c 20 4b 72 69 73 74 75  |ila Yezu, Kristu|
00000040  2c 20 4d 77 61 6e 61 20  79 61 20 4e 7a 61 6d 62  |, Mwana ya Nzamb|
00000050  69 20 2a 2e 0a 59 6f 61  6e 69 20 4d 62 6f 74 69  |i *..Yoani Mboti|
00000060  6b 69 20 6b 65 20 79 69  74 61 20 59 65 7a 75 20  |ki ke yita Yezu |
00000070  0a 20 28 4d 74 20 33 2c  31 2d 36 2e 31 31 2d 31  |. (Mt 3,1-6.11-1|
00000080  32 3b 20 4c 63 20 33 2c  31 2d 36 2e 31 35 2d 31  |2; Lc 3,1-6.15-1|
00000090  38 29 0a 32 20 4e 61 20  6d 75 6b 61 6e 64 61 20  |8).2 Na mukanda |
000000a0  79 61 20 70 72 6f 66 65  74 61 20 49 7a 61 79 61  |ya profeta Izaya|
000000b0  2c 20 62 6f 20 73 6f 6e  69 6b 61 6b 61 20 6e 64  |, bo sonikaka nd|
000000c0  65 3a 20 20 54 61 6c 61  21 20 4d 6f 6e 6f 20 6b  |e:  Tala! Mono k|
000000d0  65 20 74 69 6e 64 61 20  6e 74 75 6d 77 61 20 6e  |e tinda ntumwa n|
000000e0  61 20 6d 6f 6e 6f 20 6e  61 20 6e 74 77 61 6c 61  |a mono na ntwala|
000000f0  20 6e 61 20 6e 67 65 2c  20 73 61 6d 62 75 20 6e  | na nge, sambu n|
00000100  61 20 6b 75 79 69 64 69  6b 69 6c 61 20 6e 67 65  |a kuyidikila nge|
00000110  20 6e 7a 69 6c 61 2e 0a  20 33 20 4e 64 69 6e 67  | nzila.. 3 Nding|
00000120  61 20 6d 6f 73 69 20 6d  65 20 77 61 6b 61 6e 61  |a mosi me wakana|
00000130  20 6e 61 20 6b 61 74 69  20 79 61 20 6e 73 65 6b  | na kati ya nsek|
00000140  65 2e 20 42 65 6e 6f 20  79 69 64 69 6b 61 20 6d  |e. Beno yidika m|
00000150  75 6b 69 64 69 20 79 61  20 4d 66 75 6d 75 20 6e  |ukidi ya Mfumu n|
00000160  61 20 62 65 74 6f 3b 20  62 65 6e 6f 20 74 61 6e  |a beto; beno tan|
00000170  64 75 6c 61 20 62 61 6e  7a 69 6c 61 20 6e 61 20  |dula banzila na |
00000180  79 61 6e 64 69 20 2a 2e  0a 0a                    |yandi *...|
0000018a

Cette commande est intéressante j'aimerais en savoir plus. J'ai eu un problème sur ce même type de fichier avec les BOM, que j'ai réussi à virer en en entrant dans sed son code hexadécimal je crois, alors il y a peut-être une solution de ce côté?
Pour le double je vais arranger ça...

Edit : pour la conversion en html ça semble marché sauf pour la ligne 1 1

Dernière modification par L'Africain (Le 18/05/2015, à 12:06)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#8 Le 18/05/2015, à 12:16

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

Voici à quoi correspond ce fichier (pas d'espaces bizarres, mais une espace précède le premier 1) :

 1 1  Yai luyantiku ya Nsangu ya mbote ya ke tadila Yezu, Kristu, Mwana ya Nzambi *.
Yoani Mbotiki ke yita Yezu 
 (Mt 3,1-6.11-12; Lc 3,1-6.15-18)
2 Na mukanda ya profeta Izaya, bo sonikaka nde:  Tala! Mono ke tinda ntumwa na mono na ntwala na nge, sambu na kuyidikila nge nzila.
 3 Ndinga mosi me wakana na kati ya nseke. Beno yidika mukidi ya Mfumu na beto; beno tandula banzila na yandi *.
 

et voici comment le transforme ta commande, comme on peut s'y attendre

 
 1 1  Yai luyantiku ya Nsangu ya mbote ya ke tadila Yezu, Kristu, Mwana ya Nzambi *.
Yoani Mbotiki ke yita Yezu 
 (Mt 3,1-6.11-12; Lc 3,1-6.15-18)
2 Na mukanda ya profeta Izaya, bo sonikaka nde:  Tala! Mono ke tinda ntumwa na mono na ntwala na nge, sambu na kuyidikila nge nzila.

 3 Ndinga mosi me wakana na kati ya nseke. Beno yidika mukidi ya Mfumu na beto; beno tandula banzila na yandi *.
 

Remarque : Pour la présentation, j'ai ajouté une espace sur les lignes vides en début et fin de balises-codes, car sinon elles n'apparaissent pas.

Hors ligne

#9 Le 18/05/2015, à 12:17

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Alors si je travail sur le html ça marche, mais c'est bien plus compliqué car je dois alors supprimer toutes les balises!! Mais si je convertis en html puis de nouveau en txt ça ne fonctionne pas...
PS: je ne vois pas mon doublon?


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#10 Le 18/05/2015, à 12:45

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Cet espace quadratin est donc une suite de 3 octets : e2 80 83

Alors pour le substituer avec sed on fait quoi? J'ai testé ça, mais ça marche pas:

sed -i 's/\xe2\x80\x83/ /g' mon_fichier

J'ai de bon résultat sur les fichier html au pire.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#11 Le 18/05/2015, à 12:52

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

L'Africain a écrit :

Alors si je travail sur le html ça marche, mais c'est bien plus compliqué

Ne t'embêtes pas avec ça, car pingouinux a trouvé l'explication (très simple) de ton problème, il l'a démontrée en #8.

L'Africain a écrit :

Cet espace quadratin est donc une suite de 3 octets : e2 80 83

Alors pour le substituer avec sed on fait quoi?

Tu ne t'en préoccupes pas, car pingouinux a trouvé l'explication (très simple) de ton problème, il l'a démontrée en #8.

---------

Comme pingouinux l'a dit en #8, le problème est simplement lié au fait que, sur les lignes concernées, la ligne commence par une espace et non pas par le chiffre.

Du coup, exemple sur la première ligne :
- ça matche le " 1 " du début de la ligne, ça ajoute un retour à la ligne
- la suite de la ligne est "1  Yai luyantiku [...]", sans espace au début (car déjà consommée par le match précédent), donc ça ne matche pas pour le 2me chiffre de la ligne

Hors ligne

#12 Le 18/05/2015, à 12:52

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

PS: je ne vois pas mon doublon?

Il a probablement été supprimé par un modérateur entre-temps.

Hors ligne

#13 Le 18/05/2015, à 13:08

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

ok mais alors qu'elle commande dois-je utiliser pour me mettre ce f***u verset 1 à la ligne? je crois que sur l'exemple que je vous ai donné il y a un espace avant le premier 1 mais sur d'autres lignes du fichier, comme 15 1 , je ne crois pas que le 15 soit précédé d'un espace.
J'ai essayé de supprimer les espaces en début de ligne avant d'appliquer la commande plus haut et bien l'espace devant l'exemple n'est pas supprimé...??


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#14 Le 18/05/2015, à 13:13

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

sur d'autres lignes du fichier, comme 15 1 , je ne crois pas que le 15 soit précédé d'un espace.

On ne voit pas cette partie, on ne peut pas se prononcer.

J'ai essayé de supprimer les espaces en début de ligne avant d'appliquer la commande plus haut et bien l'espace devant l'exemple n'est pas supprimé...??

Comment tu as fait ça ?

-----

As-tu essayé comme ça ?

sed 's/^ //;s/ [0-9] /\n&/g'

Hors ligne

#15 Le 18/05/2015, à 14:07

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

Tu peux essayer ainsi

sed  's/^ \+[0-9]\+ /\n&/g' ton_ficher

et voir si ça te convient

Ajouté : Ta commande en #11 est correcte

Dernière modification par pingouinux (Le 18/05/2015, à 14:11)

Hors ligne

#16 Le 18/05/2015, à 14:13

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

pingouinux: j'ai l'impression que ça ne répond pas du tout au besoin : là tu ne vas matcher que le première nombre, qu'il y ait une espace au début ou non.
Ce que j'ai cru comprendre, c'est qu'il veut que le 2me nombre aille à la ligne...

Hors ligne

#17 Le 18/05/2015, à 14:21

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

@tiramiseb : Oui, effectivement. Il nous faudrait une exemple plus complet de fichier, avec le résultat attendu.

Ajouté :
À défaut d'autres précisions, voici autre chose à essayer :

sed  -r 's/^( +[0-9]+\b)?( *[0-9]+ )/\1\n\2/g' le_fichier

Dernière modification par pingouinux (Le 18/05/2015, à 15:19)

Hors ligne

#18 Le 18/05/2015, à 15:44

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Oui vous avez bien compris tous les nombres doivent aller à la ligne comme ça:

1
1 Yai luyantiku ya Nsangu ya mbote ya ke tadila Yezu, Kristu, Mwana ya Nzambi *.
Yoani Mbotiki ke yita Yezu
(Mt 3,1-6.11-12; Lc 3,1-6.15-18)
2 Na mukanda ya profeta Izaya, bo sonikaka nde:  Tala! Mono ke tinda ntumwa na mono na ntwala na nge, sambu na kuyidikila nge nzila.
3 Ndinga mosi me wakana na kati ya nseke.
(....)
2 #ici nouveau chapitre
1 # verset 1
2...texte
15 # chapitre 15
1 ...texte...
2 ..texte.

Les commandes ne fonctionnent pas, seulement sur certains chiffres comme je l'ai dit. C'est donc pour ça que je pense que travailler avec des espaces ne fonctionne pas. À la base là où le 1 reste derrière le chiffre, il y avait une lettrine. Je crois que cela est la cause. Il doit y avoir un espace cadratin qui empêche de mettre à la ligne. Le retour de hd n'a rien dit à ce sujet?
J'ai essayé ça :

sed 's/^ //;s/ [0-9] /\n&/g'

Ça marche pas, mais c'est pas si différent de ma première commande. Puis ça :

sed  -r 's/^( +[0-9]+\b)?( *[0-9]+ )/\1\n\2/g' le_fichier

ne marche pas non plus.
Une fois tout les versets et chapitre à la ligne je peux appliquer les commandes :

sed -i 's/^[0-9][0-9] [a-z]*/\\v &/g
sed -i 's/^[0-9] [a-z]*/\\v &/g'
sed -i 's/^[0-9][0-9]/\\c &/g'
sed -i 's/^[0-9]/\\c &/g'

Mais comme à certains retour à la ligne il y a des erreurs, le fichier final n'est pas correct.

Pour répondre à la question de comment j'ai supprimé les espaces en début de ligne:

sed -i ' s/^[ ]*//g' mon fichier

Dernière modification par L'Africain (Le 18/05/2015, à 15:48)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#19 Le 18/05/2015, à 16:12

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

L'Africain #18 a écrit :

Les commandes ne fonctionnent pas, seulement sur certains chiffres comme je l'ai dit.

Il faut que tu montres une partie représentative du fichier d'origine, la commande que tu lances, ce que tu obtiens et ce que tu souhaites obtenir.

Hors ligne

#20 Le 18/05/2015, à 16:16

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

(et fais tout ça dans des blocs "code" et non "quote", même pour citer le fichier d'origine, histoire de ne pas perdre les espaces)

Hors ligne

#21 Le 18/05/2015, à 16:17

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Ben voilà, je pense que c'est bon, vous aviez raison ! Il suffisait de faire deux fois la commande de retour à la ligne pour les deux chiffres, avec entre les deux une suppression d'espace!

sed -i 's/^[ ]*//g;  s/ [0-9] /\n&/g; s/^[ ]*//g'  mon_fichier

Merci pour votre aide, je vais mettre résolu...


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#22 Le 18/05/2015, à 16:26

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Négatif ! il y a toujours quelques fichiers récalcitrants!


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#23 Le 18/05/2015, à 16:35

tiramiseb

Re : (Résolu) Substitution d'espace impossible avec sed

Nous ne sommes pas devins.

Hors ligne

#24 Le 19/05/2015, à 15:35

L'Africain

Re : (Résolu) Substitution d'espace impossible avec sed

Oui vous n'êtes pas devin... Merci en tout cas pour votre aide, j'ai finalement fait les corrections à la main c'est pas si long que ça. Juste dommage qu'on ai pas trouvé de réponse au mystère...
Cordialement


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#25 Le 19/05/2015, à 16:02

pingouinux

Re : (Résolu) Substitution d'espace impossible avec sed

L'Africain a écrit :

Juste dommage qu'on ai pas trouvé de réponse au mystère...

C'est surtout dommage que tu ne nous aies pas fourni les informations demandées… smile

Hors ligne