[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: