Forum Programmation.autre sed et pattern

Posté par  (site web personnel) .
Étiquettes :
0
3
nov.
2012

Bonjour,
Je cherche à isoler dans une ligne un motif du style 0000:0000
Où suis-je dans l'erreur quand j'utilise la commande qui suit ?

echo dds[0000]:fhers[080e:0780]dfsgdg |sed 's/^*\[\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\)]*$/\1/'

Sachant que

echo dds[0000]:fhers[080e:0780]dfsgdg|sed 's/\[\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\)]//'

efface comme escompté le motif …

  • # les *

    Posté par  . Évalué à 5.

    la difference se trouve dans tes *

    j'imagine que la premiere ne fait finalement rien,
    et c'est normal car l'etoile toute seule ne veut rien dire dans une expression reguliere.

    mais combinée avec le . elle veut dire "n'importe quel caractere".

    chez moi ca marche comme cela

    $ echo dds[0000]:fhers[080e:0780]dfsgdg | sed 's/.*\[\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\)].*/\1/'
    080e:0780
    
    
    • [^] # Re: les *

      Posté par  (site web personnel) . Évalué à 1. Dernière modification le 03 novembre 2012 à 20:30.

      Merci beaucoup NeoX, je pouvais chercher encore un moment … |-)

      • [^] # Re: les *

        Posté par  . Évalué à 4.

        Tant qu'à faire autant compresser un petit peu la regex…

        echo dds[0000]:fhers[080e:0780]dfsgdg | sed 's/.*\[\([0-9a-f]\{4\}:[0-9a-f]\{4\}\)].*/\1/'
        
        
  • # sed et pattern

    Posté par  . Évalué à 1.

    Salut,

    Ceci devrait faire l'affaire également :

    $ echo $A
    dds[0000]:fhers[080e:0780]dfsgdg
    
    $ echo $A | sed  's/.*\[\([^:]*:[^]]*\)].*/\1/'
    080e:0780
    
    

    ;-)

  • # et grep !

    Posté par  . Évalué à 3.

    en utilisant l'option -o (non portable, je ne sais pas si autre chose que GNU grep supporte), et tant qu'on y est, avec encore une autre regex pour le matching :)

    $ echo dds[0000]:fhers[080e:0780]dfsgdg| grep -o "\[[[:xdigit:]]\{4\}:[[:xdigit:]]\{4\}\]"
    [080e:0780]

    (désolé, c'est pas en syntaxe shell, mais les ]] sont interprétés comme des références à wikipedia, mais pas les séquences d'échappement des caractères HTML …)

    • [^] # Re: et grep !

      Posté par  . Évalué à 1.

      Salut,

      grep -o '\[[^:]*[^]]:[^]]*\]'
      
      
      • [^] # Re: et grep !

        Posté par  . Évalué à 3.

        oui, j'ai vu ton commentaire au dessus. C'est pour ça que je prenais la peine de préciser que c'était encore une proposition supplémentaire.
        Cela dit, ta regex est certes plus compacte, mais aussi moins précise !

        C'était aussi l'occasion de signaler l'existence des classes de caractères que je trouve sous utilisées.

Suivre le flux des commentaires

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