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!
Produit le même résultat que