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