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/11/2018, à 11: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, à 17:14)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 12/11/2018, à 12: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, à 12:46)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 12/11/2018, à 15: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 smile


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#4 Le 13/11/2018, à 12: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, à 14:11)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#5 Le 13/11/2018, à 16: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 :

  1. il prend la ligne, en retire \n final et met cette ligne dans le "pattern space"

  2. il applique les commandes sur ce pattern space

  3. il rajoute le \n à la fin du pattern space et affiche ce dernier

  4. il vide le pattern space

  5. 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 »

  1. $!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 « $! »

  2. /\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)

  3. P : affiche la première ligne du pattern space

  4. 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, à 17:21)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 13/11/2018, à 16: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 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#7 Le 13/11/2018, à 17:23

Postmortem

Re : [Résolu] Ajouter \s devant titre dans fichier texte

L'Africain a écrit :

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, à 19:14

L'Africain

Re : [Résolu] Ajouter \s devant titre dans fichier texte

Merci.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne