Supprimer un paragraphe contenant un mot

Résolu/Fermé
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013 - 30 janv. 2013 à 14:14
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013 - 30 janv. 2013 à 19:04
Bonjour à tous,
je suis nouveau sur le forum et je demande votre aide pour m'aider à mon problème.
J'ai actuellement un fichier .txt d'exemple de la forme :

-DEBUT-
BEGIN:VEVENT
DTSTAMP: ...
DTSTART: ...
DTEND: ...
UID: ...
SUMMARY:CM - InTsi\, InS4D\, InS4E
LOCATION: ...
DESCRIPTION: ...,
CATEGORIES: ...
END:VEVENT
-FIN-

j'ai cherché avec la commande sed comment supprimer tout un paragraphe du texte comme :
sed '/BEGIN/,/END/d' fichier.txt

et espérer avoir le résultat suivant :

-DEBUT-
-FIN-

Le seul problème c'est que je cherche a supprimer ce paragraphe mais a condition qu'il contienne le mot "InS4E"

J'espère que vous pourriez m'aider,
Merci d'avance

A voir également:

5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
30 janv. 2013 à 14:48
Salut,

sed '/DEBUT/{:z;N;/FIN/!bz;/InS4E/{s/\([^\n]*\n\).*\n\(.*\)/\1\2/};}'

0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 17:13
Merci pour ta réponse mais il m'affiche une erreur :

sed: 1: "/DEBUT/{:z;N;/FIN/!bz;/ ...": unexpected EOF (pending }'s)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
30 janv. 2013 à 17:18
Quel système ? Quelle version de sed ?

Essaye en rajoutant un point virgule avant l'avant dernière accolade :

sed '/DEBUT/{:z;N;/FIN/!bz;/InS4E/{s/\([^\n]*\n\).*\n\(.*\)/\1\2/;};}'


Ou en mettant la syntaxe dans un fichier comme suit :
$ cat script.sed 
/DEBUT/ {                              
    :z                                 
    N                                  
    /FIN/ !b z                         
    /InS4E/ {                          
        s/\([^\n]*\n\).*\n\(.*\)/\1\2/ 
    }                                  
}

Et en l'appelant comma ça :
sed -f script.sed fichier
0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 17:25
En faisan l'appel avec le script.sed sa marche super ! Merci beaucoup !
0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 17:33
J'ai peut-être parlé un peu vite, sa me supprime juste la dernière ligne

Je suis sur MacBook et je n'arrive pas a connaitre la version de sed
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
30 janv. 2013 à 17:43
Chez moi (Gnu/Linux) :
$ sed --version
GNU sed version 4.2.1


Voilà ce que ça donne :

$ cat plop 
-DEBUT0-
BEGIN:VEVENT
UID: ...
SUMMARY:CM - InTsi\, InS4D\,
LOCATION: ...
END:VEVENT
-FIN0-
-DEBUT1-
BEGIN:VEVENT
UID: ...
SUMMARY:CM - InTsi\, InS4D\, InS4E
LOCATION: ...
END:VEVENT
-FIN1-
-DEBUT2-
BEGIN:VEVENT
UID: ...
SUMMARY:CM - InTsi\, InS4D\,
LOCATION: ...
END:VEVENT
-FIN2-

$ sed -f script.sed plop 
-DEBUT0-
BEGIN:VEVENT
UID: ...
SUMMARY:CM - InTsi\, InS4D\,
LOCATION: ...
END:VEVENT
-FIN0-
-DEBUT1-
-FIN1-
-DEBUT2-
BEGIN:VEVENT
UID: ...
SUMMARY:CM - InTsi\, InS4D\,
LOCATION: ...
END:VEVENT
-FIN2-

$
0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 17:45
J'ai testé cette option mais le problème est la :

sed --version
sed: illegal option -- -
usage: sed script [-Ealn] [-i extension] [file ...]
sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

et effectivement c'est bien le resultat que je cherche !
Je vais essayer de mettre a jour sed
0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 17:50
C'est bon sa marche ! J'ai mis a jour sed et executé le script et sa marche super bien ! Encore un grand merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 18:53
Et dit moi, tu aurai une idée de comment faire si je voulais faire la même chose mais a condition qu'il y ai deux mots présents dans l'intervalle ?
Merci d'avance
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
30 janv. 2013 à 18:57
A la place de "/InS4E/" tu mets :

/motif1.*motif2/

En respectant l'ordre d'apparition des motifs 1 et 2.
0
Prezf Messages postés 8 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 30 janvier 2013
30 janv. 2013 à 19:04
Super merci !
0