[SHELL] isoler 2 valeurs dans un fichier

Résolu
meelooz -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Pour gagner du temps, quel est actuellement la sortie que tu obtiens ?
    0
  4. meelooz
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. meelooz
     
    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
  7. meelooz
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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