Forum Programmation.shell optimisation de comamnde SED

Posté par  .
Étiquettes : aucune
0
17
oct.
2008
Bonjour,

Je dois mettre en forme une variable pour cela j'utilise la commande suivante

echo $var | sed 's/(//' | sed 's/)//' | sed 's/,//'

Je trouve cette façon un peut lourde et trop longue. N'y a t il pas un moyen de faire cela en un seule sed et non pas 3.

Merci
  • # man re

    Posté par  . Évalué à 8.


    [binarym@senso-rezo]:~% echo "(aaa,bbb)" | sed -e 's/[(),]//g'
    aaabbb


    Tu définis une classe de caractère avec [ ] que tu supprimeras et ce pour toute ta chaine ( /g ).
    • [^] # Re: man re

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

      Et si jamais les motifs de remplacement sont plus complexe, il est de toute façon de passer plusieurs expressions à sed :
      sed -e 's/@/_at_/g' -e 's/[(),]//g'
      • [^] # Re: man re

        Posté par  . Évalué à 3.

        ... car on ne fait qu'1 fork/exec au lieu de N.
  • # tr

    Posté par  . Évalué à 4.

    Dans ton exemple (mais ton vrai script est peut-être plus compliqué), tu peux utiliser tr qui sera sans doute plus efficace :
    echo $var | tr -d '(),'

    Etienne
    • [^] # Re: tr

      Posté par  . Évalué à 1.

      Allez je chipote : il n'y a pas l'option 'g' dans l'exemple initial, donc ce n'est pas équivalent (mais c'est une très bonne idée de présenter tr de toutes manières)
  • # Pas besoin de sed

    Posté par  . Évalué à 4.

    Ni d'autre chose d'ailleurs, bash fait déjà ça très bien:
    echo ${var//[,\/)]/}

    (note le back-slash devant le slash qui est entre les crochets car sinon il est interprété comme le séparateur de la substitution)
    cf man bash
    • [^] # Re: Pas besoin de sed

      Posté par  . Évalué à 4.

      C'est effectivement très pratique pour des scripts qu'on garde pour soi, mais *attention*, ça ne doit pas être utilisé pour des scripts distribués dans des projets/à d'autres personnes: ce n'est pas POSIX donc pas portable.

      D'ailleurs, ça ne marche pas sur Debian et Ubuntu qui ont dash comme shell par défaut.

Suivre le flux des commentaires

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