David BERCOT, dimanche 24 février 2008, 17:10:05 CET > > Bonjour, ’jour,
> J'ai un petit problème avec 'sed'. Je souhaite effectuer le > remplacement d'une expression par une autre, mais uniquement > une seule fois dans un fichier. > Or, si je fais 'sed s/expr1/expr2/ monfichier', si expr1 est > présent plusieurs fois, elle sera remplacée à chaque fois. > Les recherches que j'ai effectuées ne parlent que du nombre de > substitutions (1, toutes, la dernière, etc...) sur une ligne, > et pas sur un fichier... > > Auriez-vous une piste ? Il faut gérer le test et la boucle de lecture. Je pense qu’un truc comme ça ferait l’affaire : sed -e ':x;n;s/a/b/;Tx;:y;n;by' ou, en plus clair : # essayer la substitution :x # étiquette 'x' n # lire une ligne s/a/b/ # faire la substitution Tx # si la substitution a échoué, repartir en 'x' # la substitution a réussi une fois :y # étiquette 'y' n # lire une ligne by # repartir en y Sed applique les instructions sur chaque ligne, donc, pour éviter que le s/// soit appliqué à chaque ligne, il faut manger soi-même les lignes avant la substitution (boucle avec :x) et après (boucle avec :y). M’enfin, bon, il y a sûrement d’autres solutions… -- Sylvain Sauvage