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 22/09/2021, à 17:51

vuolsicosi

[RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Bonjour à tous,
Je sais par avance qu'on risque de me reprocher de ressortir un sujet maintes fois traité, mais j'ai essayé pleins de solutions différentes proposées et je bloque vraiment complètement....
Et entre guillemets, je n'écris que très rarement des scripts (alors sed....), mais celui-ci me serait très utile.

Voici mon problème de prof de maths nul en codage :
J'écris un sujet de contrôle en LateX, et après chaque question, je mets la correction.
Ça ressemble à ça

Le fichier s'appelle devoir_corrige.tex

Exercice 1: Combien font 3+3

	\begin{corrige}

3+3=6

	\end{corrige}
Combien font 3+4
	\begin{corrige}
3+4=7

	\end{corrige}

Et je voudrais simplement obtenir le fichier suivant

Combien font 3+3

Combien font 3+4

J'aimerais donc supprimer toutes les lignes comprises entre \begin{corrige} et \end{corrige} (inclus)
Peut-être que mes problèmes viennent des caractères \ et { ou des lignes blanches.

Merci à ceux qui auront la patience de rabâcher...
Nicolas

Dernière modification par vuolsicosi (Le 22/09/2021, à 18:21)

Hors ligne

#2 Le 22/09/2021, à 18:14

pingouinux

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Bonsoir,
Essaye ceci :

sed '/\\begin{corrige}/,/\\end{corrige}/d' devoir_corrige.tex >devoir_non_corrige.tex

Hors ligne

#3 Le 22/09/2021, à 18:20

vuolsicosi

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

C'est parfait, merci beaucoup.
Il me reste quelques trucs à régler, les sauts de page, etc...

Mais c'est exactement ce que je voulais, même si je n'y comprends rien smile

Encore merci.
Nicolas.

Hors ligne

#4 Le 22/09/2021, à 18:43

Amiralgaby

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Bonjour,

Du coup j'arrive en retard et avec une commande moche

perl -pe 's/\n/@/' devoir_corrige.tex | sed -E 's/\\begin\{corrige}[^a-zA-Z]*end\{corrige}//g' | sed 's/@/\n/g'

@vuolsicosi, Ce fut un sacré défit, j'allais même commencer à faire du awk lol

Merci @pingouinux car je connaissais pas assez bien le matching sur plusieurs lignes


Vive la communauté du Libre !!!

Hors ligne

#5 Le 22/09/2021, à 18:55

Tawal

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Hello,

C'est dommage de ne pas comprendre ! C'est pas comme ça qu'on progresse, n'est-ce pas prof ? lol

En fait, le sed dit :
De chercher les lignes à partir du motif  \begin{corrige} jusqu'au motif \end{corrige} et appliquer l'action delete dessus.
La syntaxe utilisée est :
/patern1/,/patern2/d : d pour delete (effacer), patern1 et patern2 les motifs recherchés.
Et comme l'antislash \ est un caractère "spécial" (pouvant être interprété), on le protège de l'interprétation par un antislash.
sed travaille sur le fichier devoir_corrige.tex et envoie le résultat dans le fichier devoir_non_corrige.tex


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#6 Le 22/09/2021, à 19:21

beuguissime

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

salut,
Fallait demander aux collègues de NSI. big_smile

Hors ligne

#7 Le 22/09/2021, à 19:28

Tawal

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Amiralgaby a écrit :

Ce fut un sacré défit

C'est ce qui nous fait b**der lol


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#8 Le 22/09/2021, à 19:34

vuolsicosi

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Tawal a écrit :

   

C'est dommage de ne pas comprendre ! C'est pas comme ça qu'on progresse, n'est-ce pas prof ?

C'est mal connaître les profs ! Faites ce que je dis, pas ce que je fais !

Mais oui, je vais m'y plonger, puis j'irai faire le malin auprès du prof de NSI.

Et puis beuguissime, faut pas bouder, c'est rien. wink

Hors ligne

#9 Le 22/09/2021, à 20:29

beuguissime

Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.

Nan mais c'était pour la blague. Je ne suis pas assez bon pour être prof de NSI. big_smile

Hors ligne