Caractères spéciaux interprétés (à tort)

Résolu
jeanne38 Messages postés 9 Date d'inscription   Statut Membre -  
jeanne38 Messages postés 9 Date d'inscription   Statut Membre -
Bonjour,

J'ai un petit probleme avec le sed de mon script bash shell :

$CADP_TIME
contient
/common/bin.sun5/memtime

echo $CADP_TIME | sed -e "s./.\\/.g"
me retourne
\/common\/bin.sun5\/memtime
ce qui me va pour la suite de mon programme, pour pouvoir traiter les caractères spéciaux.

OR

quand je fais : (le . est le séparateur du sed pour la lisibilité)
EXPANDED_CADP_TIME='echo $CADP_TIME | sed -e "s./.\\/.g"'
echo "$EXPANDED_CADP_TIME"

j'ai la valeur
/common/bin.sun5/memtime
et non pas
\/common\/bin.sun5\/memtime

C'est comme si \/common\/bin.sun5\/memtime était interprété dans la variable EXPANDED_CADP_TIME.

Comment faire pour qu'elle ne le soit PAS ?

Car ensuite je fais :
cat $SVL_LOG | sed -e 's/$EXPANDED_CADP_TIME //'
pour remplacer $EXPANDED_CADP_TIME par rien

et bien sur la chaine contenue dans $EXPANDED_CADP_TIME n'est pas trouvée, à cause des / qui ne sont pas précédés de \
et donc pas trouvée = pas substituée ...

Merci par avance aux pros du shell !!
Configuration: Solaris
Firefox 2.0.0.18

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Déjà pour ton 1er problème essaye ça plutôt :
    EXPANDED_CADP_TIME=$(echo $CADP_TIME | sed -e "s./.\\/.g")
    Ça devrait aller mieux.

    Ensuite pour ton second problème, remplace tes quotes simples par des quotes doubles et change de séparateurs aussi :
    cat $SVL_LOG | sed -e "s#$EXPANDED_CADP_TIME##"
    ;-))
    0
  2. jeanne38 Messages postés 9 Date d'inscription   Statut Membre
     
    Bonjour,

    Voila les résultats pour tes suggestions (en /bin/sh) :

    > /bin/sh
    $ EXPANDED_CADP_TIME=$(echo $CADP_TIME | sed -e "s./.\\/.g")
    syntax error: `EXPANDED_CADP_TIME=$' unexpected

    -> Il n'a pas l'air d'aimer les parenthèses !

    J'essaie avec ça :
    $ EXPANDED_CADP_TIME=$"`echo $CADP_TIME | sed -e 's./.\\/.g'`"
    $ echo $EXPANDED_CADP_TIME
    $/common/bin.sun5/memtime
    pas bon ...

    J'essaie avec ça :
    $ EXPANDED_CADP_TIME=$`echo $CADP_TIME | sed -e 's./.\\/.g'`
    $ echo $EXPANDED_CADP_TIME
    $/common/bin.sun5/memtime
    pas bon non plus ...

    Je m'y perds moi avec ces "" `` '' ....
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Voilà ce que ça donne chez moi (par contre j'ai rajouté un anti-slash à l'expression de sed, je n'avais pas testé hier et il s'avère qu'il en manquait un...) :
    jp@MDK:~/tmpfs ssh$ CADP_TIME="/common/bin.sun5/memtime"
    
    jp@MDK:~/tmpfs ssh$ EXPANDED_CADP_TIME=$(echo $CADP_TIME | sed -e "s./.\\\/.g")
    
    jp@MDK:~/tmpfs ssh$ echo $EXPANDED_CADP_TIME
    \/common\/bin.sun5\/memtime
    
    jp@MDK:~/tmpfs ssh$
    ;-))
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      J'oubliais, si la syntaxe "$(commande...)" n'est pas supportée par le shell "sh", reviens à l'ancienne (les quotes inverses) :
      EXPANDED_CADP_TIME=`echo $CADP_TIME | sed -e "s./.\\\/.g"`
      ;-)
      0
  4. jeanne38 Messages postés 9 Date d'inscription   Statut Membre
     
    Merci merci , ça marche !! :-)
    Je vais pouvoir être payée encore ce mois ;-)
    0