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.

Répondre à