#1 Le 06/01/2015, à 14:31
- L'Africain
(résolu) mettre texte devant chiffre et retour chariot avec sed
Bonjour,
Je dois convertir un certain nombres de fichier texte en format usfm pour ensuite les convertir en osis.
Bref mon texte doit ressembler à ça:
\id TOB
\mt1 Tobie
\c 1
\p
\v 1 Livre des actes de .....
\v 22 Acte...de plus c'était mon neveu, il était de ma parenté.
\c 2
\p
\v 1 Sous le règne d'Asarhaddon,
Il ressemble pour l'instant à ça:
Tobie
1
1 Livre des actes de T...
plus c'était mon neveu, il était de ma parenté.
...
2
1 Sous le règne d'Asa
Avec mon script sed que voici :
#Supprime les lignes vide et ajoute "\id TOB" à la première ligne,
find . -name "*.txt" -exec sed -i '/./!d; 1i\\\id TOB\n\\mt1' {} \;
#Ajoute \v devant chaque ligne commençant par un chiffre suivit d'un espace et de texte,
find . -name "*.txt" -exec sed -i 's/^[0-9] [a-z]*/\\v &/g' {} \;
#Ajout "\v " devant chaque ligne commençant par deux chiffres suivit d'un espace et de texte,
find . -name "*.txt" -exec sed -i 's/^[0-9][0-9] [a-z]*/\\v &/g' {} \;
#Ajoute "\c\n\p" devant chaque ligne correspondant à un chiffre suivit d'un retour à la ligne,
find . -name "*.txt" -exec sed -i 's/^[0-9]\n/\\c &\n\\p/g' {} \;
J'obtiens ça:
\id TOB
\mt1
Tobie
\c 1
\p
\v 1 Livre des actes de .....
La dernière commande ne marche pas bien, elle ne semble pas lire le retour à la ligne si je mets ^[0-9]\n, mais si je ne met pas le \n (comme dans le résultat) s'il y a deux chiffres il va faire la substitution après chaque chiffre, exemple pour le chiffre 16 ça donne:
\c 1
\p6
aulieu de:
\c 16
\p
J'ai un problème aussi pour mettre \mt1 devant le contenue de la deuxième ligne ou bien fusionner les deux lignes \mt1 Tobie.
Merci pour votre aide!
Dernière modification par L'Africain (Le 12/01/2015, à 11:32)
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 08/01/2015, à 16:22
- soshy
Re : (résolu) mettre texte devant chiffre et retour chariot avec sed
Salut,
La dernière commande ne marche pas bien, elle ne semble pas lire le retour à la ligne si je mets ^[0-9]\n, mais si je ne met pas le \n (comme dans le résultat) s'il y a deux chiffres il va faire la substitution après chaque chiffre, exemple pour le chiffre 16 ça donne:
essaye avec : s/^[0-9]+\n/\\c &\n\\p/g
Et de fait, tu peux corriger :
#Ajoute "\c\n\p" devant chaque ligne correspondant à un chiffre suivit d'un retour à la ligne,
en
#Ajoute "\c\n\p" devant chaque ligne correspondant à un nombre suivit d'un retour à la ligne,
il serait peut être mieux de faire comme ça :
#!/bin/bash
# pour chaque fichier dans ls *.txt
for FILE in `ls *.txt` ; do
sed -i '/./!d; 1i\\\id TOB\n\\mt1' $FILE
sed -i 's/^[0-9] [a-z]*/\\v &/g' $FILE
sed -i 's/^[0-9][0-9] [a-z]*/\\v &/g' $FILE
sed -i 's/^[0-9]+\n/\\c &\n\\p/g' $FILE
# de quoi ramener Tobie sur la ligne mt1 (si il n'y a qu'une seule ligne \mt1)
sed -i 's/\\mt1[ ]*\n/\\mt1 /g' $FILE
done
Je ne peux pas tester ce que je viens d'écrire, mais on devrait pas être loin de la solution.
Dernière modification par soshy (Le 08/01/2015, à 16:54)
Hors ligne
#3 Le 08/01/2015, à 21:11
- L'Africain
Re : (résolu) mettre texte devant chiffre et retour chariot avec sed
Merci Je vais essayer ça parce que c'est plus propre, mais entre temps j'ai réussi à bricoler quelque-chose...
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 12/01/2015, à 11:14
- L'Africain
Re : (résolu) mettre texte devant chiffre et retour chariot avec sed
Voilà j'ai réussi, le problème semble-t-il venait du bom qui s'était infiltré dans mon texte après conversion en utf8; voilà le script final:
#!/bin/bash
# pour chaque fichier dans ls *.txt
for FILE in `ls *.txt` ; do
#Comence par mettre à la ligne chaque verset
sed -i 's/ [0-9][0-9] /\n&/g' $FILE
sed -i 's/ [0-9] /\n&/g' $FILE
#Supprime l'espace en début de ligne
sed -i 's/^[ ]*//g' $FILE
#Supprime les lignes vide et ajoute "\id TOB \mt1" à la première ligne,
sed -i '/./!d; 1i\\\id TOB\n\\mt1 ' $FILE
#Colle la ligne 2 et 3
sed -i '/\\mt1$/N; s/\n/ /' $FILE
#Ajout "\v " devant chaque ligne commençant par un puis deux chiffres suivit d'un espace et de texte,
sed -i 's/^[0-9] [a-z]*/\\v &/g' $FILE
sed -i 's/^[0-9][0-9] [a-z]*/\\v &/g' $FILE
#ajoute \c devant chaque ligne commencant par deux chiffre
sed -i 's/^[0-9]+\n/\\c &\n\\p/g' $FILE
rename 's/txt/sfm/g' $FILE
# Autre solution pour mettre \mt1 devant les noms des livres bibliques, dans ce cas modifier la ligne qui ajoute \id TOB
#sed -i 's/^[A-Z]/\\mt1 &/g' $FILE
#sed -i 's/^[1-2] [A-Z]/\\mt1 &/g' $FILE
done
Merci pour ton aide
Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne