#1 Le 10/11/2019, à 21:39
- L'Africain
(Résolu) Remplacement de parenthèse dans un fichiers
Bonjour,
J'ai plusieurs fichiers texte dans lesquels je souhaiterait remplacer des parenthèses comme ceci:
Ort, vor (d. h. östlich von) der Ebene. (H. Araba, wie Kap. 3,16; so auch Kap. 11,2. 16;12,1. 3. 8;18,18) Er wußte aber nicht, daß ihm im Rücken der Stadt ein Hinterhalt gelegt war.
Par:
Ort, vor \f + \ft d. h. östlich von\f* der Ebene. \f + \ft H. Araba, wie Kap. 3,16; so auch Kap. 11,2. 16;12,1. 3. 8;18,18\f Er wußte aber nicht, daß ihm im Rücken der Stadt ein Hinterhalt gelegt war.
Avec une contrainte, à savoir que dans un groupe de parenthèse il peut y avoir un autre groupe de parenthèse qui dans ce cas n'a pas à être remplacé, par exemple:
Mitte des Flußtales an, (Vergl. die Anm. zu 4. Mose 13,23; (desgl. Jos. 13,9. 16)) und
Deviendrait:
Mitte des Flußtales an, \f + \ft Vergl. die Anm. zu 4. Mose 13,23; (desgl. Jos. 13,9. 16)\f* und
J'ai essayé ça:
sed -ri 's/ \((*.*)\)/\\f \+ \\ft \1\\f*/g'' *txt
Mais j'ai cette erreur:
sed: -e expression n°1, caractère 33: Expression régulière précédente invalide
Mais même si ça fonctionnerait je crois que ça produirait des erreurs car il utiliserait la première parenthèse de fermeture, je le signale quand même car je voudrais comprendre à quoi est due l'erreur.
Merci d'avance
Dernière modification par L'Africain (Le 12/11/2019, à 14:40)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 10/11/2019, à 22:09
- pingouinux
Re : (Résolu) Remplacement de parenthèse dans un fichiers
Bonsoir,
J'ai essayé ça:
sed -ri 's/ \((*.*)\)/\\f \+ \\ft \1\\f*/g'' *txt
sed -ri 's/ \((*.*)\)/\\f \+ \\ft \1\\f*/g'' *txt
Tu as en trop : * et '
Pour le premier exemple, ceci devrait marcher.
sed -ri 's/ \(([^)]*)\)/\\f \+ \\ft \1\\f*/g' *txt
Pour le second, pas d'idée pour l'instant.
Hors ligne
#3 Le 11/11/2019, à 20:15
- L'Africain
Re : (Résolu) Remplacement de parenthèse dans un fichiers
Ok merci, je vais faire le reste manuellement.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 12/11/2019, à 02:33
- kamaris
Re : (Résolu) Remplacement de parenthèse dans un fichiers
Normalement, ce petit programme awk devrait faire l'affaire (testé sur tes deux lignes + deux trois autres, sans trop d'approfondissement… de même, le test d'erreur devrait être plus complet)
#!/bin/bash
awk -F'(' '{
if ( NF!=split($0,a,")") ) {
print "Erreur : le nombre de parenthèses ouvrantes est différent du nombre de parenthèses fermantes."
exit 1
}
s=$1; n=0; m=0
for (i=2;i<=NF;i++) {
n++; m=split($i,a,")")-1
if (n==1) s=s "\\f + \\ft "
else s=s "("
if (m>0) {
if (m==n) {
for (j=1;j<=m-1;j++) s=s a[j] ")"
s=s a[m] "\\f*" a[m+1]
n=0
} else { s=s $i; n-=m }
} else s=s $i
}
print s }' "$1"
Dernière modification par kamaris (Le 12/11/2019, à 13:48)
Hors ligne
#5 Le 12/11/2019, à 03:02
- L'Africain
Re : (Résolu) Remplacement de parenthèse dans un fichiers
Merci Kamaris ça a l'air de fonctionner correctement, un "leger" problème, c'est que quand il y a u problème de parenthèse, le texte est remplacé par "Erreur : le nombre de paranthèses ouvrantes est différent du nombre de paranthèses fermantes." Ce qui me donne des fichiers amputé en sortie.
J'ai utilisé cette boucle, dans laquelle le script notes.sh est le contenu de ton post:
for i in *.usfm ; do ./notes.sh $i >$i_note ; done
Cependant l'idée d'y mettre une alerte est bonne.
Dernière modification par L'Africain (Le 12/11/2019, à 03:11)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#6 Le 12/11/2019, à 13:47
- kamaris
Re : (Résolu) Remplacement de parenthèse dans un fichiers
J'ai modifié le programme awk pour que s'il détecte un problème de parenthèses sur une ligne, il écrive son message d'erreur sur la sortie d'erreur standard du shell appelant, et qu'il écrive la ligne en sortie standard sans modification (au lieu de quitter).
Ça devrait aller pour ta boucle, tu auras les erreurs dans le terminal et tes fichiers de sortie seront complets et non pollués.
J'ai aussi modifié le script pour qu'il puisse prendre en une fois un nombre arbitraire de fichiers d'entrée (passés directement à awk).
#!/bin/bash
awk -F'(' '{
if ( NF!=split($0,a,")") ) {
print "Erreur (fichier " FILENAME ", ligne " FNR ") : le nombre de parenthèses ouvrantes est différent du nombre de parenthèses fermantes." > "/dev/stderr"
print
next
}
s=$1; n=0; m=0
for (i=2;i<=NF;i++) {
n++; m=split($i,a,")")-1
if (n==1) s=s "\\f + \\ft "
else s=s "("
if (m>0) {
if (m==n) {
for (j=1;j<=m-1;j++) s=s a[j] ")"
s=s a[m] "\\f*" a[m+1]
n=0
} else { s=s $i; n-=m }
} else s=s $i
}
print s }' "$@"
Hors ligne
#7 Le 12/11/2019, à 14:40
- L'Africain
Re : (Résolu) Remplacement de parenthèse dans un fichiers
Ok merci c'est parfait!
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne