#1 Le 13/02/2017, à 10:28
- L'Africain
[Résolu] ajout caractères entre \n texte \n
Bonjour,
Je me bat avec sed depuis ce matin pour essayer de mettre les caractère \s1 devant une ligne entouré par deux retours à la ligne, par exemple:
\v 7 Les Benéi Israël fructifient, foisonnent, se multiplient
et se revigorent, fort, fort; la terre se remplit d’eux.
La servitude
\v 8 Un nouveau roi se lève sur Misraîm, qui n’avait pas connu Iosseph.
devrait me donner :
\v 7 Les Benéi Israël fructifient, foisonnent, se multiplient
et se revigorent, fort, fort; la terre se remplit d’eux.
\s1 La servitude
\v 8 Un nouveau roi se lève sur Misraîm, qui n’avait pas connu Iosseph.
Seule les lignes entourées par ces deux retours à la ligne et qui ne commencent pas par un \ sont concernées.
Merci pour votre aide!
Dernière modification par L'Africain (Le 13/02/2017, à 16:10)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 13/02/2017, à 11:14
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Bonjour,
Voici un script en python qui devrait convenir :
#!/usr/bin/python
import sys, re
fic=sys.argv[1]
def repl(k): return k.group(1)+'\\s1 '+k.group(2)
with open(fic,'r') as f: txt=f.read()
print(re.sub('(\n *\n)([^\][^\n]+\n *\n)',repl,txt)),
À appeler ainsi :
./le_script fichier
Hors ligne
#3 Le 13/02/2017, à 11:29
- L'Africain
Re : [Résolu] ajout caractères entre \n texte \n
Merci Pingouinux pour ta réponse. Hélas ça ne fonctionne pas.
Dans le fichier de sortie c'est le même texte. Par contre y a-t-il une option avec python pour travailler directement sur le fichier ? Comme le -i avec sed? parce que j'en ai 75 des fichiers...
Edit :
Je viens de comprendre pourquoi, avant le lf (retour à la ligne il y une espace! Ce qui donne:
\s\n(mon texte)\n\s\n
Mais le symbole de l'espace dans gedit est bizarre c'est un triangle renversé plus grand que le triangle de l'espace insécable.
Dernière modification par L'Africain (Le 13/02/2017, à 11:42)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 13/02/2017, à 11:46
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Hélas ça ne fonctionne pas.
Il fonctionne sur ton exemple en #1 :
$ cat fichier
\v 7 Les Benéi Israël fructifient, foisonnent, se multiplient
et se revigorent, fort, fort; la terre se remplit d’eux.
La servitude
\v 8 Un nouveau roi se lève sur Misraîm, qui n’avait pas connu Iosseph.
$ ./le_script fichier
\v 7 Les Benéi Israël fructifient, foisonnent, se multiplient
et se revigorent, fort, fort; la terre se remplit d’eux.
\s1 La servitude
\v 8 Un nouveau roi se lève sur Misraîm, qui n’avait pas connu Iosseph.
Peux-tu donner un exemple de fichier qui ne donne pas un résultat correct ?
Par contre y a-t-il une option avec python pour travailler directement sur le fichier ? Comme le -i avec sed? parce que j'en ai 75 des fichiers...
Pour un fichier
./le_script fichier >fichier2 && mv fichier2 fichier
mais personnellement je préfère vérifier le résultat avant d'écraser le fichier d'origine.
On peut aussi faire une boucle sur les 75 fichiers.
Hors ligne
#5 Le 13/02/2017, à 11:52
- L'Africain
Re : [Résolu] ajout caractères entre \n texte \n
Désolé, J'ai modifié le post plus haut en même temps que tu me répondais! (Au sujet des espaces). le problème est donc de ce côté là, mais je sais pas comment identifier cette espace!
Dernière modification par L'Africain (Le 13/02/2017, à 12:11)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#6 Le 13/02/2017, à 12:23
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
mais je sais pas comment identifier cette espace!
Donne le retour de
hd quelques_lignes_du_fichier_contenant_les_espaces_bizarres
Hors ligne
#7 Le 13/02/2017, à 12:32
- L'Africain
Re : [Résolu] ajout caractères entre \n texte \n
Ok voici le retour de la commade hd sur 4 lignes avec deux espace insécables (ce que ça semble être):
hd gntest
00000000 c2 a0 0a 4c 61 20 73 65 72 76 69 74 75 64 65 0a |...La servitude.|
00000010 c2 a0 0a 5c 76 20 38 20 0a 0a 0a |...\v 8 ...|
0000001b
Sinon j'ai finalement réussi à les supprimer mais le script python ne modifie toujours pas le fichier.
Edit :
Euh... En fait si, mais pas correctement voici un exemple:
\v 7 Les Benéi Israël fructifient, foisonnent, se multiplient
et se revigorent, fort, fort; la terre se remplit d’eux.\s1 La servitude
là c'est donc ok mais ailleurs, où il y a des balises avec \ il le fait aussi alors qu'il ne devrait pas :
sa révélation et de sa puissance.\it*
\s1 \c 1
En Misraîm
ici le \s1 devrait être devant En Misraîm et rien devant les balises \c
Dernière modification par L'Africain (Le 13/02/2017, à 12:43)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#8 Le 13/02/2017, à 12:43
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Il s'agit de ce caractère
=> <U00A0> /xc2/xa0 NO-BREAK SPACE
Hors ligne
#9 Le 13/02/2017, à 12:46
- L'Africain
Re : [Résolu] ajout caractères entre \n texte \n
Oups, de nouveau nos messages se sont chevauchés... oui il s'agit de ce caractère, comme dit plus haut j'ai réussi à le virer, mais reste le petit problème du script qui met la balise \s devant d'autres balises. Soit je modifie tous les espaces insécables d'un coup puis on travail à partir de là, soit on intègre ça au script python? Ce qui est le plus simple pour toi.
Merci de ton aide.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#10 Le 13/02/2017, à 13:22
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Donne-moi un exemple qui ne marche pas, sous la forme
hd le_fichier_qui_provoque_une_erreur
Je ne pense pas avoir le temps de regarder cet après-midi.
Hors ligne
#11 Le 13/02/2017, à 13:41
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Tu peux essayer cette version, en python3 :
#!/usr/bin/python3
import sys, re
fic=sys.argv[1]
def repl(k): return k.group(1)+'\\s1 '+k.group(2)
with open(fic,'r') as f: txt=f.read()
print(re.sub(r'(\n[%s ]*\n)([^\\][^\n]+\n[%s ]*\n)'%(chr(0xa0),chr(0xa0)),repl,txt))
Hors ligne
#12 Le 13/02/2017, à 15:33
- L'Africain
Re : [Résolu] ajout caractères entre \n texte \n
Super ça fonctionne parfaitement sur les fichiers dont j'ai préalablement enlevé les espaces. Un tout grand merci.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#13 Le 13/02/2017, à 17:02
- pingouinux
Re : [Résolu] ajout caractères entre \n texte \n
Super ça fonctionne parfaitement sur les fichiers dont j'ai préalablement enlevé les espaces.
Normalement, ça doit marcher aussi avec les espaces insécables.
Hors ligne