Expressions régulières et sed, awk et autres grep

J’ai eu récemment à faire un petit script pour modifier une adresse IP noyée dans un fichier (généré par iptables-save).

Le choix qui semble s’imposer est d’utiliser sed. J’avais le souvenir que que sed (System V) ne supportait que les BRE (Basic Regular Expressions).

[quote]The sed utility shall support the BREs described in the Base Definitions volume of IEEE Std 1003.1-2001, Section 9.3, Basic Regular Expressions.
opengroup.org/onlinepubs/000 … s/sed.html[/quote]

Là où awk, grep -E, perl ou PHP se contenteraient d’un masque comme:

Avec, sed (BRE), on se retrouve avec:

Chaque () ou {} doit être échappé. Bonjour la lisibilité! (oui, je sais, ce motif capturera des IP comme 999.645.358.444 mais on peut supposer que iptables n’acceptera jamais ce genre d’adresse! Il n’y a donc aucune raison qu’une IP comme celle-là se trouve dans les tables d’iptables. Et puis, ici le but n’est pas de faire de la validation d’adresse mais juste un remplacement)

Alors, réjouissez-vous, heureux utilisateurs de l’implémentation debian de sed, il existe une option -r qui permet l’utilisation des ERE (Extended RE). Et dire qu’elle se trouvait bien en évidence dans mon fichier man! :unamused:

Produit le même résultat que

de toutes façons, je n’etais pas assez à l’aise pour partir dans des ERE, et je n’avais appris que les BRE, me semble t il.
Mais maintenant, je saurais que si un pattern ne passe pas avec sed, c’est sans doute qu’il faut lui passer un -r.
Merci !