[SHELL] isoler 2 valeurs dans un fichier

Résolu
Bonjour,

comment pourrais-je isoler 2 valeurs dans un fichier de configuration?

exemple:

fichier de base:

lease 192.168.1.2 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:cf:44:9b:51:b6;
uid "\001\364\316F\232Q\266";

lease 192.168.1.3 {
starts 3 2010/08/18 13:18:56;
ends 3 2010/08/18 13:28:56;
tstp 3 2010/08/18 13:28:56;
cltt 3 2010/08/18 13:18:56;
binding state free;
hardware ethernet f4:ce:36:8c:de:b6;
uid "\001\345\306A\252Q\279";

j'aimerais avoir en sortie:

192.168.1.2 f4:cf:44:9b:51:b6
192.168.1.3 f4:ce:36:8c:de:b6

isoler l'ip ou l'@MAC j'y arrive mais pas en gardant le couple ip/MAC, je tourne un peu en rond et je ne maitrise pas assez sed pour m'en sortir sans un petit coup de main.

merci à vous

6 réponses

  1. Modérateur
    [jp@MDK-2010 tmpfs]$ cat plop
    lease 192.168.1.2 {
    starts 3 2010/08/18 13:18:56;
    ends 3 2010/08/18 13:28:56;
    tstp 3 2010/08/18 13:28:56;
    cltt 3 2010/08/18 13:18:56;
    binding state free;
    hardware ethernet f4:cf:44:9b:51:b6;
    uid "\001\364\316F\232Q\266";
    
    lease 192.168.1.3 {
    starts 3 2010/08/18 13:18:56;
    ends 3 2010/08/18 13:28:56;
    tstp 3 2010/08/18 13:28:56;
    cltt 3 2010/08/18 13:18:56;
    binding state free;
    hardware ethernet f4:ce:36:8c:de:b6;
    uid "\001\345\306A\252Q\279";
    
    [jp@MDK-2010 tmpfs]$ egrep 'lease|ethernet' plop  | egrep -o '([0-9]{1,3}\.){3}[0-9]{1}|([[:alnum:]]{2}:){5}[[:alnum:]]{2}' | sed 'N;s/\n/ /'
    192.168.1.2 f4:cf:44:9b:51:b6
    192.168.1.3 f4:ce:36:8c:de:b6
    
    [jp@MDK-2010 tmpfs]$

    ;-))
    1
    1. Contributeur
      hello
      avec awk
      $ awk -F"[ ;]*" '/^lease/ {l=$2} ; /^hardware/ {print l, $3}' fichier
      192.168.1.2 f4:cf:44:9b:51:b6
      192.168.1.3 f4:ce:36:8c:de:b6
      $ 
      1
      1. Modérateur
        Salut,

        Pour gagner du temps, quel est actuellement la sortie que tu obtiens ?
        0
        1. Bonjour jipicy,

          pour l'instant avec grep et awk j'obtiens toutes les IP ou toutes les @MAC, je n'arrive pas isoler le couple, dès le premier grep c'est fichu forcement, jessaie en lisant de la doc sur sed de supprimer toutes les lignes ne commençant pas par lease ou hardware.

          cat dhcpd.leases | sed '/^lease\|^hardware/!d' mais ça ne marche pas, je dois mal m'y prendre, je continue à chercher de mon coté, merci en tout cas de t'interesser à mon problème :)
          0
          1. bon j'avance, avec : cat dhcpd.leases | grep -E '(lease|hardware)' j'arrive deja a isoler les 2 lignes, j'ai une sortie du genre :

            lease 192.168.2.3 {
            hardware ethernet 00:1c:f0:f9:93:28;
            lease 192.168.5.20 {
            hardware ethernet 00:19:db:e7:6e:25;
            0
            1. wow !!! merci jipicy!

              moi j'étais un train de bricoler un truc super crade genre :

              sed -e "s/hardware\ ethernet//" -e "s/lease\ //" -e "s/\ {//" -e "s/;//" pour avoir mes 2 valeurs meme pas sur la meme ligne.

              la partie : egrep -o '([0-9]{1,3}\.){3}[0-9]{1}|([[:alnum:]]{2}:){5}[[:alnum:]]{2}'

              j'ai pas du tout compris, je vais lire le man parceque j'etais tres loin du compte.

              En tout cas un grand merci, le resultat est là et j'ai appris des choses.
              0
              1. Modérateur
                La solution de dubcek est bien plus simple et aérée ;-))

                La partie "regex" pour l'IP est expliquée ici, c'est un peu le même principe pour la partie @MAC ;-))
                0

            Discussions similaires

            question pix mot caché

            7 réponses