Supprimer un bloc avec sed
Résolu
b.hamichi
-
b.hamichi -
b.hamichi -
Bonjour,
J'explique mon probleme:
Voici un fichier.txt qui contient des Blocs de text repérés par des mots reservés BEGIN et END
BEGIN
sdsdsds
motif "text1"
szdsdes
...
END
BEGIN
sdsdsds
motif "text3"
szdsdes
...
END
BEGIN
sdsdsds
motif "text2"
szdsdes
...
END
J'aimerai supprimer le bloc entre BEGIN et END quand la chaine motif = text3
Merci pour votre aide.
J'explique mon probleme:
Voici un fichier.txt qui contient des Blocs de text repérés par des mots reservés BEGIN et END
BEGIN
sdsdsds
motif "text1"
szdsdes
...
END
BEGIN
sdsdsds
motif "text3"
szdsdes
...
END
BEGIN
sdsdsds
motif "text2"
szdsdes
...
END
J'aimerai supprimer le bloc entre BEGIN et END quand la chaine motif = text3
Merci pour votre aide.
A voir également:
- Supprimer un bloc avec sed
- Supprimer rond bleu whatsapp - Guide
- Supprimer page word - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer pub youtube - Accueil - Streaming
- Comment supprimer un compte gmail - Guide
11 réponses
Salut,
sed '/BEGIN/{:z;N;/END/!bz;/text3/d}' fichierExplications :
/BEGIN/ { # On trouve une ligne contenant le motif :z # Etiquette N # On ajoute la ligne suivante dans l'espace de travail /END/ !b z # Si on aucun motif END n'est trouvé, on se branche #+ à l'étiquette z et on recommence /text3/ d # Une fois le motif END trouvé, si on trouve un motif #+ correspondant à text3, on supprime le contenu de #++ de l'espace de travail };-))
Trop fort !!!!!
Il est formidable ce forum :))))))))))))))))))
Je savais pas que SED est un outil tres puissant !!!!!
Je vous remercie :)
Il est formidable ce forum :))))))))))))))))))
Je savais pas que SED est un outil tres puissant !!!!!
Je vous remercie :)
Je trouve que le cour est bien structuré, auriez vous un lien sur les "Expressions régulières", je crois que c'est vraiment la base de SED. Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour jipicy,
Help me SVP :)
J'ai essayé la commande ci dessous sur un system interne à mon entreprise (TOP avec SH) ca ne marche pas !!!
sed '/SETpath/{:z;N;/IMPLpath/!bz;/LTS0545212-002/d}' monfichier
Erreur généré:
sed: The label /SETpath/{:z;N;/IMPLpath/!bz;/LTS047680-002/d} is greater than eight characters.
Sachant que cette manip fonctionne correctement sous OpenSUSE (SH)
Merci
Help me SVP :)
J'ai essayé la commande ci dessous sur un system interne à mon entreprise (TOP avec SH) ca ne marche pas !!!
sed '/SETpath/{:z;N;/IMPLpath/!bz;/LTS0545212-002/d}' monfichier
Erreur généré:
sed: The label /SETpath/{:z;N;/IMPLpath/!bz;/LTS047680-002/d} is greater than eight characters.
Sachant que cette manip fonctionne correctement sous OpenSUSE (SH)
Merci
Essaie d'exécuter ta commande comme ça (et non pas sur une seule ligne) :
sed ' /SETpath/ { :z N /IMPLpath/ !b z /LTS0545212-002/ d }' tonfichier
C'est cool, ça fonctionne !!!! peut tu m'expliquer la différence?
Maintenant je galaire sur un autre probleme, enfaite:
Je prends la LTS0545212-002 est je la remplace par '${M_tab[k]}' avec une boucle while pour incrémenter le K , ca fonctionne mais (tj mais :))), il mon script fais des modification sur le dernier élément du tableau
sed '
/SETpath/ {
:z
N
/IMPLpath/ !b z
/'${M_tab[k]}'/ d
}' $med_file > fileX
A mon avis, il faut aussi incrémenter le fichier $med_file
sed '
/SETpath/ {
:z
N
/IMPLpath/ !b z
/'${M_tab[k]}'/ d
}' $med_file_$k > fileX_$(($k+1))
Ça ne fonctionne toujours pas !
Auriez vous une autre solution
Merci encore pour vote patience :))
Maintenant je galaire sur un autre probleme, enfaite:
Je prends la LTS0545212-002 est je la remplace par '${M_tab[k]}' avec une boucle while pour incrémenter le K , ca fonctionne mais (tj mais :))), il mon script fais des modification sur le dernier élément du tableau
sed '
/SETpath/ {
:z
N
/IMPLpath/ !b z
/'${M_tab[k]}'/ d
}' $med_file > fileX
A mon avis, il faut aussi incrémenter le fichier $med_file
sed '
/SETpath/ {
:z
N
/IMPLpath/ !b z
/'${M_tab[k]}'/ d
}' $med_file_$k > fileX_$(($k+1))
Ça ne fonctionne toujours pas !
Auriez vous une autre solution
Merci encore pour vote patience :))
La différence tient essentiellement sur la version de "sed". On aurait pu aussi utiliser le paramètre "-e", mais là aussi c'est un peu biscornu à mettre en place...
Toujours est-il en parlant de version de "sed", qu'elle est celle que tu utilises (sed --version) ? Sur quel système ?
Si ta version est supérieure à 4.0.5, tu as le paramètre "-i" (in place) qui permet de modifier le fichier fourni en entrée sans passer par un fichier temporaire.
Toujours est-il en parlant de version de "sed", qu'elle est celle que tu utilises (sed --version) ? Sur quel système ?
Si ta version est supérieure à 4.0.5, tu as le paramètre "-i" (in place) qui permet de modifier le fichier fourni en entrée sans passer par un fichier temporaire.
La version est inférieur à 4.0.5, et le paramètre "-i" (in place) n'existe pas
en tappant:
man sed --> j 'ai comme options (-e -n -f)
Y'a t'il une autre solution sans passer par des fichiers temporaires?
Peut on installer sur le système une nouvelle version de SED (et encore voir si j'ai tous les droits)
Merci
en tappant:
man sed --> j 'ai comme options (-e -n -f)
Y'a t'il une autre solution sans passer par des fichiers temporaires?
Peut on installer sur le système une nouvelle version de SED (et encore voir si j'ai tous les droits)
Merci