Forum Programmation.shell Format adresse mac

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
29
jan.
2013

je suit confronté a un petit problème , j'ai une jointure à faire sur des champ de type adresse MAC, cependant je ne peut pas les trier car dans un des deux fichier les adresse MAC se présente 0:17:31:5a:9:34 au lieu de 00:17:31:5A:09:34 . Comment remettre l'adresse au bon formata sur tous les fichier ?

  • # sérieux ?

    Posté par  (site web personnel) . Évalué à 2.

    tu n'as pas la commande man sur ton système ?

    bwalé, je suis sympa : option -f d'après http://pwet.fr/man/linux/commandes/sort

    sinon, j'espère que tu as réussi à t'en sortir avec http://linuxfr.org/forums/programmation-shell/posts/format-mac-et-ipv4 :)

  • # certes

    Posté par  . Évalué à 0. Dernière modification le 29 janvier 2013 à 10:46.

    Oui je m'en suis sorti mais le problème est différent , les adresses MAc que j'obtient ont des caractère en moi lorsque sur les 2 valeur héxa si la première est 0 il ne l'affiche pas.

    • [^] # Re: certes

      Posté par  (site web personnel) . Évalué à 1.

      ah, bah, t'es dans la merde.

      autant régler le problème à la source dans ce cas.

      • [^] # sed

        Posté par  . Évalué à 1.

        ou faire du sed:

        # soit pour rajouter les 0 qui manquent:
        $ echo 0:17:31:5a:9:34 | sed ":label /\(:\|^\)\([0-9a-f]\)\(:\|$\)/ {s/\(:\|^\)\([0-9a-f]\)\(:\|$\)/\10\2\3/ig; b label}"
        00:17:31:5a:09:34
        # soit pour enlever les 0 en plus
        $ echo 00:17:31:5a:09:34 | sed 's/0\([0-9a-f]\)/\1/gi'
        0:17:31:5a:9:34
        
        
        • [^] # Re: sed

          Posté par  . Évalué à -1. Dernière modification le 29 janvier 2013 à 11:50.

          ouai tu 'as donnai une piste pourrait tu juste m'expliquer rapidement le :

          :label /\(:\|^\)\([0-9a-f]\)\(:\|$\)/ {s/\(:\|^\)\([0-9a-f]\)\(:\|$\)/\10\2\3/ig; b label}
          
          

          car j'ai testé ta solution mais je vai devoir l'adapté car le dernier jeu de caractère n'est pas pris en compte.

        • [^] # Re: sed

          Posté par  (site web personnel) . Évalué à 0.

          Une version SED sans branchement:

          s/^/:/
          s/$/:/
          s/:\(.\):/:0\1:/g
          s/^://
          s/:$//
          
          

          On peut aussi s'amuser à tout écrire sur une seule ligne.

          Ou bien avec GNU AWK

          BEGIN {
              FS=":"
          }
          {
              for(i = 1; i <= 6; ++i)
              {
              if(i == 6)
              {
                  sep="\n";
              } else
              {
                  sep=":";
              }
              printf("%02x%s", strtonum("0x" $(i)), sep);
              }
          }
          
          
  • # sed

    Posté par  . Évalué à 4. Dernière modification le 29 janvier 2013 à 11:00.

    suffit avec sed par exemple de remplacer tout caractère unique dans les champs mac_adress par 0 suivi par sa valeur et tout "vide" par 00

    tout simplement par exemple pour la premère occurence :
    sh-4.2$ echo 0:17:31:5a:9:34 | sed 's/./0&/'
    00:17:31:5a:9:34

    je te laisse le scripter pour s'adapter à tes besoins
    mais c'est l"idée et surtout n'oublies pas le cas potentiel "vide" à remplacer par 00
    et que tu peux avoir plusieurs occurences de caractères uniques sur la même adresse !

    • [^] # Re: sed

      Posté par  . Évalué à 1.

      tout simplement par exemple pour la premère occurence :
      sh-4.2$ echo 0:17:31:5a:9:34 | sed 's/./0&/'
      00:17:31:5a:9:34

      sauf que c'est plus compliqué car là il ne fait que le 0->00 initial mais pas le 9->09 à la 5e place

      • [^] # Re: sed

        Posté par  . Évalué à 7.

        Et comme ça :

        $ echo "MAC 0:17:31:5a:9:4" | sed -r 's/\b.:/0&/g;s/(:)(.\b)/\10\2/'
        MAC 00:17:31:5a:09:04
        
        
        • [^] # Re: sed

          Posté par  . Évalué à 2.

          +1
          joli et efficace

          • [^] # Re: sed

            Posté par  . Évalué à 1.

            je valide aussi

            +1

      • [^] # Re: sed

        Posté par  . Évalué à 5.

        c'est pourquoi il t'a été mentionné très précisément que l'exemple fourni ne concernait QUE la 1ere occurence et que c'était à toi d'adapter…

        :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.