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

Résolu
jeanne38 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
jeanne38 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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 !!
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
jeanne38 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
jeanne38 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Merci merci , ça marche !! :-)
Je vais pouvoir être payée encore ce mois ;-)
0