On Friday 07 February 2003 14:48, Yann Forget wrote: > yann@r2d2:~$ /sbin/ifconfig ppp0 > ppp0 Link encap:Point-to-Point Protocol > inet addr:81.48.176.239 P-t-P:81.48.176.1 Mask:255.255.255.255 > UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 > RX packets:23340 errors:0 dropped:0 overruns:0 frame:0 > TX packets:19246 errors:0 dropped:0 overruns:0 carrier:0 > collisions:0 txqueuelen:3 > RX bytes:16668745 (15.8 MiB) TX bytes:2241692 (2.1 MiB)
Il s'agit donc bien d'un exercise théorique et il est évident qu'il y a aussi d'autres moyens de parvenir à ce résultat. On peut presque considérer cela comme un jeu :-) L'objectif est de n'extraire que les adresse IP de la ligne contenant P-t-P en éliminant le texte; ceci en utilisant uniquement sed... et sans pipe. Mis à part la récupération de la commande ifconfig; 'faut pas éxagérer ! donc, on fait : yann@r2d2:~$ /sbin/ifconfig ppp0 |\ sed 's/^.*P-t-P/@&/ /^[^@]/d s/^.*addr:// s/[ ]*P-t-P:/@/ s/[ ]*[Mask]*:.*$// s/\([0-9.]*\)@\([0-9.]*\)/\2 \1/' 81.48.176.1 81.48.176.239 <- résultat yann@r2d2: La dernière ligne sert à permuter les deux IP... je ne me souviens plus si tu en avais besoin, mais je l'ai mis pour le fun :-) Mais bon, j'explique chaque ligne : s/^.*P-t-P/@&/ Remplace le premier caractère de toute ligne contenant la "chaîne" P-t-P par le caractère '@'. J'ai ne fait besoin de "marquer" cette ligne car je veux me débarasser de toutes les autres. /^[^@]/d Je vire donc toutes les lignes qui ne commencent pas par le caractère '@'. s/^.*addr:// Je substitue tout ce qui se trouve depuis le début de la ligne jusqu'a la "chaîne" 'addr:' par "rien-du-tout". s/[ ]*P-t-P:/@/ Je substitue tout ce qui se trouve entre le premier "espace" trouvé et la "chaîne" 'P-t-P:' par le caractère '@' (encore un marqueur pour la suite). s/[ ]*[Mask]*:.*$// La fin de la ligne ne m'intéresse pas et je vire donc tout ce qui suit la "chaîne" 'Mask:' (précédé d'espaces)... par "rien-du-tout". s/\([0-9.]*\)@\([0-9.]*\)/\2 \1/ Et, finalement, comme je l'ai déjà dit, je permute les deux adresses IP... pour rigoler. Le résultat de l'exécution donne : 81.48.176.1 81.48.176.239 Bien sûr, il est possible d'écrire des commandes différentes, mais il me semble que nous sommes proche du nombre de commandes minimum. Daniel -- http://www-internal.alphanet.ch/linux-leman/ avant de poser une question. Ouais, pour se désabonner aussi.