#1 Le 12/11/2018, à 10:47
- L'Africain
[Résolu] Ajouter \s devant titre dans fichier texte
Bonjour
Je voudrais mettre \s2 devant des titres qui se trouve sur la ligne au-dessus de la balise \c, comme ça:
Mon titre
\c
Pour que ça donne ça:
\s Mon titre
\c
J'ai fait ça:
sed -ir 's/^[A-Z].*$\c/\\s2 &/g' mon_fichier
mais ça marche pas?
Ensuite d'autres titres sont en chiffres romains, J'ai donc les lettres I ou V qui commence une nouvelle ligne, mais il peut arriver que ces lettres commencent aussi un paragraphe de texte. Le chiffre romain, heureusement est soit suivi d'un point, soit d'un retour à la ligne soit d'une espace.
j'ai tenté un truc comme ça, mais bizarrement ça ne fonctionne que sur certains titres??
sed -ri 's/^I.\..*$/\\s &\n\\p/g' "$FILE"
sed -ri 's/^V\.*.*$/\\s &\n\\p/g' "$FILE"
sed -ri 's/^IV\.*.*$/\\s &\n\\p/g' "$FILE"
Merci de votre aide!
Dernière modification par L'Africain (Le 13/11/2018, à 16:14)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 12/11/2018, à 11:31
- Postmortem
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Re-bonjour !
$ cat fic.txt
TITRE
\c
bla
bla
bla
TITRE 2
\c
blabla
bla
TITRE 3
\c
$ sed -n '$!N; /\n\\c/ s/^/\\s2 /; P; D' fic.txt
\s2 TITRE
\c
bla
bla
bla
\s2 TITRE 2
\c
blabla
bla
\s2 TITRE 3
\c
Edit :
Et pour la 2ème demande :
sed -r '/^[IVXLCDM]+(\.| |$)/ s/^/\\s /' fic.txt
Dernière modification par Postmortem (Le 12/11/2018, à 11:46)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 12/11/2018, à 14:38
- L'Africain
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Super merci! La deuxième commande c'est bon ça fonctionne impeccable à part que j'avais oublié qu'il faut mettre un retour à la ligne après le titre en question avec une balise \p, donc le résultat devrait être:
\s VI. Montitre
\p
La première fonctionne, mais j'ai oublié un aspect, c'est que si j'ai une balise "\" quelconque qui précède \c il ne faut pas que l'on y mette \s, c'est du texte normal.
Par exemple la commande actuelle me met \s sur chaque ligne qui précède \c.
Ex.:
\s \mt1 Mon titre principal
\c
blabla
ou
\s \v mon texte blabla...
\c
Or dans ces cas il ne faut pas de \s.
En gros c'est uniquement s'il y a un retour à la ligne qui précède \c et que la ligne qui précède ce retour à la ligne commence par une lettre majuscule.
Mon titre
\c
Pour finir je comprends pas vraiment les commandes, et si tu peux m'expliqué je serais content
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 13/11/2018, à 11:52
- L'Africain
Re : [Résolu] Ajouter \s devant titre dans fichier texte
D'habitude je ne fais pas de petit up, mais là je suis vraiment bloqué si une âme charitable pouvait m'aider à améliorer le petit truc qui manque dans la commande sed ça serait super sympa...
Merci d'avance!
Edit:
Pour les chiffres romains je me suis adapté en ajoutant:
sed -ri 's/^\\s .*$/&\n\\p/g' "$FILE"
Il me reste le problème de \c.
Dernière modification par L'Africain (Le 13/11/2018, à 13:11)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#5 Le 13/11/2018, à 15:12
- Postmortem
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Salut,
J'ai pas testé mais comme ça, ça devrait être pas mal :
sed -n '$!N; /\n\\c/ s/^[[:upper:]]/\\s &/; P; D' fic.txt
Edit : petite correction
Explications :
Par défaut, sed fonctionne ainsi :
il prend la ligne, en retire \n final et met cette ligne dans le "pattern space"
il applique les commandes sur ce pattern space
il rajoute le \n à la fin du pattern space et affiche ce dernier
il vide le pattern space
il passe ensuite à la ligne suivante et on reprend au point 1
sed travaille donc ligne par ligne par défaut.
Dans notre cas, on désactive l'affichage par défaut (point 3. ci-dessus) avec l'option « -n »
$!N : « N » permet d'ajouter un « \n » et la ligne suivante dans le pattern space ; on a donc 2 lignes dans le pattern space ; la commande « N » n'est pas exécutée quand on est arrivé à la dernière ligne grâce au « $! »
/\n\\c/ s/^[[:upper:]]/\\s &/ : si le pattern space contient un retour à la ligne suivi de « \c », on substitue une lettre majuscule au début du pattern space par « \s », une espace et la majuscule en question (si ce n'est pas une majuscule au début du pattern space, il est laissé tel que)
P : affiche la première ligne du pattern space
D : supprime la première ligne du pattern space (il reste donc une ligne dans le pattern space) et recommence un cycle sans lire de nouvelle ligne ; on retourne en 1.
Dernière modification par Postmortem (Le 13/11/2018, à 16:21)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 13/11/2018, à 15:33
- L'Africain
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Super merci!
Ça fonctionne. Ça veut dire quoi le $!N et le P et D?
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#7 Le 13/11/2018, à 16:23
- Postmortem
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Super merci!
Ça fonctionne. Ça veut dire quoi le $!N et le P et D?
J'ai mis à jour mon précédent message
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 13/11/2018, à 18:14
- L'Africain
Re : [Résolu] Ajouter \s devant titre dans fichier texte
Merci.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne