#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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
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.
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
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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'
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
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…
Hors ligne