Fran=C3=A7ois TOURDE, lundi 25 f=C3=A9vrier 2008, 00:09:57 CET
>[=E2=80=A6]=20
> Merci pour ces explications d=C3=A9taill=C3=A9es. Mais ne doit-on pas
> consid=C3=A9rer que 1,/xxx/ qui matche la seconde occurence n'est
> pas plut=C3=B4t un bug?
Non, A1,A2 correspond =C3=A0 =C2=AB=C2=A0de la ligne A1 =C3=A0 la ligne A=
2=C2=A0=C2=BB.
Si une ligne est en correspondance avec A1, elle est prise.
Ensuite seulement, sed cherche la ligne qui correspond =C3=A0 A2,
apr=C3=A8s A1, et qui peut =C3=AAtre la derni=C3=A8re ligne si aucune ne
correspond.
Sed ne peut pas aller en avant pour v=C3=A9rifier que A2 a une
correspondance, donc d=C3=A8s que A1 correspond =C3=A0 une ligne, le bloc
est commenc=C3=A9.
Une adresse correspond toujours =C3=A0 une ligne compl=C3=A8te.
Tout =C3=A7a fait que A1,A2 correspond toujours =C3=A0 au moins deux
lignes (sauf si A1 est la derni=C3=A8re ligne, =C3=A9videmment).
Le 0 est une extension GNU pour le cas pr=C3=A9cis de la premi=C3=A8re
ligne. =C3=87a fait toujours aux moins deux lignes=C2=A0: la 0 (qui
n=E2=80=99existe pas et qui serait avant la premi=C3=A8re (la 1)) et celle
qui correspond =C3=A0 la seconde adresse.
> Dans ce cas, que devrait faire /xxx/,/xxx/ ?
Prendre toutes les lignes entre le premier xxx et le second
(s=E2=80=99il existe, sinon jusqu=E2=80=99=C3=A0 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=C3=A8re ligne.
Mauvais test, changer test=C2=A0:
$ 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=E2=80=99=C3=A0 la deuxi=C3=A8me ligne, do=
nc le
bloc correspond aux deux premi=C3=A8res lignes et s/b/ / est appliqu=C3=A9
=C3=A0 chacune des lignes du bloc, donc deux fois.
> Ok, je sais, je coupe les cheveux en sqrt(2), mais bon...
Biiip, irrationnel d=C3=A9tect=C3=A9=C2=A0!
C=E2=80=99est pas d=C3=A9conseill=C3=A9, l=E2=80=99alcool et les M=C3=A9d=
ocs=C2=A0?
--=20
Sylvain Sauvage