Problème avec sed [UNIX] - Shell/Batch - Programmation
Marsh Posté le 13-10-2008 à 10:55:25
Tu peux poster le script (ou en tout cas le bout de script concerné) ?
Marsh Posté le 13-10-2008 à 11:32:11
Ouais bien sur
Code :
|
J'ai preferé spécifié le chemin mais théoriquement, ça change rien du tout.
Marsh Posté le 15-10-2008 à 11:43:29
Ton sed marche bien, mais le problème c'est le dernier echo de ton script. C'est lui qui bouffe le backslash. Il est bien dans la chaine, mais c'est echo qui l'interprète. Il est là, mais ton script ne l'affiche pas.
Marsh Posté le 15-10-2008 à 16:18:22
Bon finalement, j'ai contourné le problème en remplaçant * par etoile et je fais de même sur tout le fichier à rechercher. Assez bizarre ce problème mine de rien...
Marsh Posté le 16-10-2008 à 09:29:24
En fait, je l'avais pas lu avant de faire ma modification. Mais ce que je comprends pas en fait, c'est que si je tape cette même ligne " echo "$i" | /usr/bin/sed "s/\*/\\\*/g" " en remplaçant $i par sa valeur, la console m'affiche ce que je veux. Par contre, si je fais cette manip en passant par un script, ça marche plus.
Mais là, j'avoue que j'ai pas d'idée pour savoir pourquoi ça fonctionne pas. J'ai pensé que la console et le script était pas sur le même shell mais je doute que ça soit le cas.
Maintenant, si je comprends bien, tu me dis que c'est à cause de cet ligne : # echo "a_rech = $a_rech" que mon sed est mal interprété (enfin peut être que je me trompe car je suis pas sur). Mais le truc, c'est que si je place ma variable a_rech dans un grep, ça ne l'interprète pas non plus. C'est ça qui est aussi bizarre.
Marsh Posté le 16-10-2008 à 13:05:37
Non en fait je me suis gourré, c'est pas le echo qui bouffe le backslash, ce sont les backquotes. La bonne nouvelle c'est que c'est simple à contourner : il suffit d'utiliser $() au lieu des backquotes :
a_rech = $(echo "$i" | /usr/bin/sed "s/\*/\\\*/g" ) |
Marsh Posté le 17-10-2008 à 11:40:24
Ok, je connaissais pas cette manière de contourner le problème. Bah je vais utiliser ça au lieu des backquotes, ça me permettra de faire moins d'erreurs bête au passage
Marsh Posté le 13-10-2008 à 10:53:02
Bonjour tout le monde,
Je dois programmer un petit programme en korn shell et dans mon algorithme, je cherche à remplacer * par \* dans un fichier texte. Par exemple si j'ai toto*, je veux qu'il devienne toto\*.
Pour cela, j'utilise la commande sed de la manière suivante : echo $variable | sed "s/\*/\\\*/g" Quand je teste cette commande en console (je précise que je travaille sous solaris), pas de problème, ça me retourne le résultat espéré. En revanche, quand je la mets dans un script, cette fois ci, la meme commande ne marche plus. Pourtant j'ai bien mis en premier ligne #! /bin/ksh (l'adresse du shell en gros) donc je comprends pas pourquoi ça marche quand je la tape en ligne de commande et que ça marche plus à l'intérieur d'un script.
Je précise que le script est lancé par sh mais je pense pas que ça peut changer quoique ce soit (enfin je peux me planter )
Merci d'avance pour l'aide