Je suppose que tu voulais dire '</tartanpion>', mais que c'est parti en postant, non ?
Je te suggérerais une solution avec Perl : perl -0777 -pe 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
voire, si tu veux supprimer les éventuelles lignes vides qui pourraient rester après avoir retiré tes balises : perl -0777 -pe 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg; s!\n\s*\n!\n!g' fichier
Même si ton problème ressemble à du boulot typique AWK, Perl a quelques petits trucs qui simplifient l'opération :
- -0777 fixe la fin de ligne au caractère de code octal 777, inexistant, donc permet de tout traiter comme une seule ligne; ainsi une seule expression régulière peut attrapper ta balise d'ouverture et celle de fermeture, même si elles sont sur plusieurs lignes (avec l'option s de la subsittution);
- *?, comme *, correspond à 0 à n fois le caractère précedent, sauf qu'il prend en priorité la chaîne la plus petite et non pas la plus grande (sinon, l'expression globale zapperait de ta première balise ouvrante à la dernière fermante);
- avec la substitution s/// comme avec les autres opérations utilisant les expressions régulières, on peut utiliser d'autres caractères que / comme séparation, ça peut rendre l'écriture plus agréable si la chaîne qu'on recherche ou celle de remplacement contient des /.
- l'option -i peut te permettre de modifier le fichier directement en place : perl -0777 -pi -e 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
éventuellement en sauvegardant l'ancienne version : perl -0777 -pi.bak -e 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone
# Pourquoi pas avec Perl ?
Posté par Arthur Accroc . En réponse au message suppression de plusieurs lignes dans un texte. Évalué à 0.
Je suppose que tu voulais dire '</tartanpion>', mais que c'est parti en postant, non ?
Je te suggérerais une solution avec Perl :
perl -0777 -pe 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
voire, si tu veux supprimer les éventuelles lignes vides qui pourraient rester après avoir retiré tes balises :
perl -0777 -pe 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg; s!\n\s*\n!\n!g' fichier
Même si ton problème ressemble à du boulot typique AWK, Perl a quelques petits trucs qui simplifient l'opération :
- -0777 fixe la fin de ligne au caractère de code octal 777, inexistant, donc permet de tout traiter comme une seule ligne; ainsi une seule expression régulière peut attrapper ta balise d'ouverture et celle de fermeture, même si elles sont sur plusieurs lignes (avec l'option s de la subsittution);
- *?, comme *, correspond à 0 à n fois le caractère précedent, sauf qu'il prend en priorité la chaîne la plus petite et non pas la plus grande (sinon, l'expression globale zapperait de ta première balise ouvrante à la dernière fermante);
- avec la substitution s/// comme avec les autres opérations utilisant les expressions régulières, on peut utiliser d'autres caractères que / comme séparation, ça peut rendre l'écriture plus agréable si la chaîne qu'on recherche ou celle de remplacement contient des /.
- l'option -i peut te permettre de modifier le fichier directement en place :
perl -0777 -pi -e 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
éventuellement en sauvegardant l'ancienne version :
perl -0777 -pi.bak -e 's!<tartanpion(\s.*?)?>.*?</tartanpion>!!sg' fichier
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone