#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' monfichier
Il 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--"f
De 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 24.04 Alienware 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' monfichier
pour exclure plusieurs carac : [^\-*+...]
Dernière modification par Hizoka (Le 12/02/2021, à 12:20)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
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 24.04 Alienware 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 24.04 Alienware 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 monfichier
Hors 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 < fichier
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
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 24.04 Alienware 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 24.04 Alienware 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 < fichier
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
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