#1 Le 12/02/2021, à 12:15
- L'Africain
Substituer avec sed seulement avant un type de caractère
Bonjoiur,
Je voudrais ajouter les balises \bd \bd* entre le début d'une ligne et la première occurrence de --. Mais il me remplace jusqu'à la deuxième occurrence. Comment faire pour que mon \bd* se retrouve directement après la première occurrence de -- dans une ligne?
Exemple texte de départ:
Jechonias begat Salathiel--So 1Ch 3:17. Nor does this contradict Jr 22:30, "Thus saith the Lord, Write ye this man (Coniah, or Jeconiah) childless"; for what follows explains in what sense this was meant--j'y applique:
sed -ri 's/^([^\].*)--/\\bd \1\\bd\*--/p' monfichierIl me fait:
\bd Jechonias begat Salathiel--So 1Ch 3:17. Nor does this contradict Jr 22:30, "Thus saith the Lord, Write ye this man (Coniah, or Jeconiah) childless"; for what follows explains in what sense this was meant\bd*--je voudrais:
\bd Jechonias begat Salathiel--\bd*So 1Ch 3:17. Nor does this contradict Jr 22:30, "Thus saith the Lord, Write ye this man (Coniah, or Jeconiah) childless"; for what follows explains in what sense this was meant--"fDe plus dans le premier membre de la commande j'ai mis la barre \ en exclusion, mais comment faire pour exclure plusieurs caractères?
Merci pour votre aide!
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 12/02/2021, à 12:18
- Hizoka

Re : Substituer avec sed seulement avant un type de caractère
Salut,
essaie ça :
sed -ri 's/^([^\].*)--([[:alnum:]].*)/\\bd \1--\\bd\*\2/p' monfichierpour exclure plusieurs carac : [^\-*+...]
Dernière modification par Hizoka (Le 12/02/2021, à 12:20)
Kubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
Hors ligne
#3 Le 12/02/2021, à 12:33
- L'Africain
Re : Substituer avec sed seulement avant un type de caractère
Ça fonctionne mais uniquement pour ce cas de figure. J'ai supprimé le p final (je sais pas pourquoi j'avais ce p, ça doit être un résidu de mes essaies)...Et j'ai mis la fin du premier membre entre parenthèse.
D'autres cas de figure ça ne fonctionne pas comme:
\bd who is called Christ--signifying "anointed." It is applied in the Old Testament to the kings (1Sa 24:6, 10); to the priests (Le 4:5, 16, &c.); and to the prophets (1Ki 19:16)\bd*--Bizarre.. et aussi carrément des endroit où la balise n'est pas mise du tout.
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 12/02/2021, à 13:22
- MicP
Re : Substituer avec sed seulement avant un type de caractère
Bonjour
sed -i 's/^\([^-]*--\)/\\bd\1\\bd\*/' /chemin/nomFichier(s)Dernière modification par MicP (Le 12/02/2021, à 13:34)
Hors ligne
#5 Le 12/02/2021, à 13:32
- L'Africain
Re : Substituer avec sed seulement avant un type de caractère
Bonjour MicP,
Ça ne fonctionne pas.
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#6 Le 12/02/2021, à 13:41
- MicP
Re : Substituer avec sed seulement avant un type de caractère
Non : Ça fonctionne très bien avec l'exemple que tu as donné dans ton premier message :
michel@debT450:~$ cat exemple
Jechonias begat Salathiel--So 1Ch 3:17. Nor does this contradict Jr 22:30, "Thus saith the Lord, Write ye this man (Coniah, or Jeconiah) childless"; for what follows explains in what sense this was meant--
michel@debT450:~$
michel@debT450:~$ sed -i 's/^\([^-]*--\)/\\bd\1\\bd\*/' exemple
michel@debT450:~$
michel@debT450:~$ cat exemple
\bdJechonias begat Salathiel--\bd*So 1Ch 3:17. Nor does this contradict Jr 22:30, "Thus saith the Lord, Write ye this man (Coniah, or Jeconiah) childless"; for what follows explains in what sense this was meant--
michel@debT450:~$ … Ça ne fonctionne pas.
Ça ne fonctionne pas. ne nous donne aucune information qui pourrait nous aider à comprendre pourquoi.
Donne nous plutôt des exemples dans lesquels ça ne fonctionne pas
de façon à ce que l'on puisse comprendre pourquoi.
Dernière modification par MicP (Le 12/02/2021, à 13:46)
Hors ligne
#7 Le 12/02/2021, à 17:57
- pingouinux

Re : Substituer avec sed seulement avant un type de caractère
Bonjour,
Peut-être ceci, en python :
$ cat mon_script.py
#!/usr/bin/env python3
import sys, re
with open(sys.argv[1]) as f:
for lig in f:
lig=re.sub('^(.*?--)',r'\\bd \1\\bd*',lig)
print(lig,end='')À lancer ainsi :
./mon_script.py monfichierHors ligne
#8 Le 12/02/2021, à 18:24
- Hizoka

Re : Substituer avec sed seulement avant un type de caractère
MicP => le problème, c'est que tu ne tolère aucun - dans les textes.
sinon avec une boucle bash
while read -r Ligne
do
Ligne1="${Ligne%%--*}
Ligne2="${Ligne#*--}"
echo "\\bd${Ligne1}--\\bd*${Ligne2}"
done < fichierKubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
Hors ligne
#9 Le 12/02/2021, à 20:29
- L'Africain
Re : Substituer avec sed seulement avant un type de caractère
Merci à vous pour vos diverses proposition, je vais tester tout ça, désolé aussi pour mon manque d'information. Sinon pour la dernière proposition d'Hizako, le script est-il a utiliser tel quel?
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#10 Le 12/02/2021, à 20:42
- L'Africain
Re : Substituer avec sed seulement avant un type de caractère
@Pinguinux, ton script fonctionne. sauf qu'il n'exclue pas les lignes qui commencent pas \ et qui doivent être traités à part. Par exemple si une ligne commence par \v 2 Montexte-- la balise doit venir après le \v 2 bd Montexte\bd*-- quelque fois il y a aussi deux chiffre au début de la phrase \v 2-8.
Mais au pire je fais tout avec le script python, puis je repasse un coup de sed pour déplacer le \bd après le \v.
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#11 Le 12/02/2021, à 21:31
- Hizoka

Re : Substituer avec sed seulement avant un type de caractère
Il te suffit de tester...
while read -r Ligne
do
Ligne1="${Ligne%%--*}"
Ligne2="${Ligne#*--}"
echo "\\bd ${Ligne1}--\\bd*${Ligne2}"
done < fichierKubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
Hors ligne
#12 Le 13/02/2021, à 08:26
- pingouinux

Re : Substituer avec sed seulement avant un type de caractère
@Pinguinux, ton script fonctionne. sauf qu'il n'exclue pas les lignes qui commencent pas \ et qui doivent être traités à part. Par exemple si une ligne commence par \v 2 Montexte-- la balise doit venir après le \v 2 bd Montexte\bd*-- quelque fois il y a aussi deux chiffre au début de la phrase \v 2-8.
Ça ne fonctionne pas. ne nous donne aucune information qui pourrait nous aider à comprendre pourquoi.
Donne nous plutôt des exemples dans lesquels ça ne fonctionne pas
de façon à ce que l'on puisse comprendre pourquoi.
Si tu modifies ta demande au fur et à mesure des réponses, c'est sans espoir. Le mieux serait de nous donner un exemple complet, comme le suggère MicP.
Hors ligne