Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1072 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [UNIX] Problème avec sed

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[UNIX] Problème avec sed

n°1799164
Dbbg
Modérateur adjoint
Posté le 13-10-2008 à 10:53:02  profilanswer
 

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 :D)
 
Merci d'avance pour l'aide :p

mood
Publicité
Posté le 13-10-2008 à 10:53:02  profilanswer
 

n°1799167
Elmoricq
Modérateur
Posté le 13-10-2008 à 10:55:25  profilanswer
 

Tu peux poster le script (ou en tout cas le bout de script concerné) ?

n°1799256
Dbbg
Modérateur adjoint
Posté le 13-10-2008 à 11:32:11  profilanswer
 

Ouais bien sur
 

Code :
  1. cat tmp2 | sort -d | uniq > tmp
  2. #Variable contenant le résultat des droits sudo de l'utilisateur
  3. res_sudo=`sudo -l`
  4. #Boucle verifiant que toutes les lignes du fichier ficref sont bien présentes dans le fichier sudo
  5. cat tmp | while read i
  6. do
  7. #On regarde si la ligne est présent dans le richier sudo -l
  8. ligne=`echo "$res_sudo" | grep -i "$i"`
  9. a_rech=`echo "$i" | /usr/bin/sed "s/\*/\\\*/g"`
  10. echo "i = $i"
  11. echo "a_rech = $a_rech"
  12. ...


 
J'ai preferé spécifié le chemin mais théoriquement, ça change rien du tout.


Message édité par Dbbg le 13-10-2008 à 11:33:44
n°1799407
Dbbg
Modérateur adjoint
Posté le 13-10-2008 à 14:37:34  profilanswer
 

petit up :p

n°1800369
matafan
Posté le 15-10-2008 à 11:43:29  profilanswer
 

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.

n°1800564
Dbbg
Modérateur adjoint
Posté le 15-10-2008 à 16:18:22  profilanswer
 

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...

n°1800670
matafan
Posté le 15-10-2008 à 18:09:17  profilanswer
 

?
 
Tu as lu mon message ?

n°1800850
Dbbg
Modérateur adjoint
Posté le 16-10-2008 à 09:29:24  profilanswer
 

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.

n°1800972
matafan
Posté le 16-10-2008 à 13:05:37  profilanswer
 

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" )

n°1801342
Dbbg
Modérateur adjoint
Posté le 17-10-2008 à 11:40:24  profilanswer
 

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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [UNIX] Problème avec sed

 

Sujets relatifs
[java] problème avec l'appel d'une commande unixProblème d'affichage en PERL sous UNIX
Probleme de programmation unix et stdarg.h[PHP] Problème sur une fonction, hébergé sur un serveur UNIX
problème socket unix - lectureProbleme d'execution de la commande Unix echo via le perl
Probleme de Charset sous Windows et pas sous UnixProblème : Utilisation sous Unix de fichiers écrits sous Windows
problème unix-windows (résolu)[C/C++ sous UNIX] problème de buffer avec fgets et cin !
Plus de sujets relatifs à : [UNIX] Problème avec sed


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR