#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
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
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 ?
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.
Hors ligne
#7 Le 22/09/2021, à 19:28
- Tawal
Re : [RÉSOLU] Bash : supprimer toutes les lignes entre deux motifs.
Ce fut un sacré défit
C'est ce qui nous fait b**der
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.
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.
Hors ligne