Re: Substitution par 'sed' une seule fois dans un fichier...
François TOURDE, lundi 25 février 2008, 00:09:57 CET
>[…]
> Merci pour ces explications détaillées. Mais ne doit-on pas
> considérer que 1,/xxx/ qui matche la seconde occurence n'est
> pas plutôt un bug?
Non, A1,A2 correspond à « de la ligne A1 à la ligne A2 ».
Si une ligne est en correspondance avec A1, elle est prise.
Ensuite seulement, sed cherche la ligne qui correspond à A2,
après A1, et qui peut être la dernière ligne si aucune ne
correspond.
Sed ne peut pas aller en avant pour vérifier que A2 a une
correspondance, donc dès que A1 correspond à une ligne, le bloc
est commencé.
Une adresse correspond toujours à une ligne complète.
Tout ça fait que A1,A2 correspond toujours à au moins deux
lignes (sauf si A1 est la dernière ligne, évidemment).
Le 0 est une extension GNU pour le cas précis de la première
ligne. Ça fait toujours aux moins deux lignes : la 0 (qui
n’existe pas et qui serait avant la première (la 1)) et celle
qui correspond à la seconde adresse.
> Dans ce cas, que devrait faire /xxx/,/xxx/ ?
Prendre toutes les lignes entre le premier xxx et le second
(s’il existe, sinon jusqu’à la fin).
> D'autre part, je viens de faire le test sur ma machine, que
> addr1 soit 0 ou 1, le match marche sur la première ligne.
Mauvais test, changer test :
$ cat >t
abc
abc
abc
abc
$ sed '0,/a/s/b/ /' t
a c
abc
abc
abc
$ sed '1,/a/s/b/ /' t
a c
a c
abc
abc
Avec 1, A2 ne peut commencer qu’à la deuxième ligne, donc le
bloc correspond aux deux premières lignes et s/b/ / est appliqué
à chacune des lignes du bloc, donc deux fois.
> Ok, je sais, je coupe les cheveux en sqrt(2), mais bon...
Biiip, irrationnel détecté !
C’est pas déconseillé, l’alcool et les Médocs ?
--
Sylvain Sauvage
Reply to: