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 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:~$ 
L'Africain a écrit :

… Ç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

L'Africain #10 a écrit :

@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.

MicP #6 a écrit :

Ç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