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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Evaluation des variables d'environnement avec sed

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Evaluation des variables d'environnement avec sed

n°515466
doncroco
Posté le 05-07-2004 à 17:08:33  profilanswer
 

Salut à tous, j'ai un petit script à faire avec sed, je voudrais remplacer une chaine de caractère par une variable d'environnement dans un fichier qui contient que des lignes du style toto porte un tutu...
 ca donne qq chose comme ca :

Code :
  1. sed "s/\(toto\) \(.*tutu\)/\$USER \2/g" fichier


Et donc, comme vous l'avez compris si ca m'affiche que l'utilisateur porte un tutu c'est gagné ;) mais pour l'instant ca m'affiche :
$USER porte un tutu
 
Si vous savez comment faire pour évaluer cette variable... ca me sauverai la vie (peut-être pas, mais ca m'éviterait de longues heures de remplacement de texte manuel...)

mood
Publicité
Posté le 05-07-2004 à 17:08:33  profilanswer
 

n°515631
arsunik
ma tuxitude me beastifie
Posté le 05-07-2004 à 22:58:01  profilanswer
 

ben enlève le "\" devant le $USER...

n°515703
doncroco
Posté le 06-07-2004 à 09:20:46  profilanswer
 

Le probleme est que le "$" est un caractère spécial de sed qui veut dire "fin de ligne" donc ca ne va pas sans l' "\"... J'avais déjà essayé... Mais merci qd mm ;)

n°515832
doncroco
Posté le 06-07-2004 à 14:34:18  profilanswer
 

Personne qui connait bien sed ici ?

n°515865
arsunik
ma tuxitude me beastifie
Posté le 06-07-2004 à 15:26:42  profilanswer
 

doncroco a écrit :

Le probleme est que le "$" est un caractère spécial de sed qui veut dire "fin de ligne" donc ca ne va pas sans l' "\"... J'avais déjà essayé... Mais merci qd mm ;)


 
Le shell (probablement le bash chez toi) va interprété la chaîne de caractère faiblement protégée ("s/\(toto\) \(.*tutu\)/\$USER \2/g" ) et va remplacer le $USER, ceci avant de passer l'argument à sed.
pour t'en convaincre, remplace sed par echo, tu verras.

n°515908
doncroco
Posté le 06-07-2004 à 16:29:39  profilanswer
 

J'ai déjà essayé avec sed et c clair que ca marche pas...  En fait qd on utilise sed, le patron est une chaine de caractère donc non interprétée par le shell (qui est bien un bash)... et si j'essaye en mettant echo à la place de sed ca donne rien de mieux... et si je met des " à la place des ' sed me renvoie une erreur...

n°516076
MaxMaveric​k
bli bli
Posté le 06-07-2004 à 21:28:58  profilanswer
 


isis:/tmp# cat > fichier
toto porte un tutu
tata porte un tutu
isis:/tmp# sed -e 's/\(toto\) \(.*tutu\)/$USER \2/g' fichier
$USER porte un tutu
tata porte un tutu
isis:/tmp# sed -e "s/\(toto\) \(.*tutu\)/$USER \2/g" fichier
root porte un tutu
tata porte un tutu
isis:/tmp# sed --version
GNU sed version 4.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.
isis:/tmp# bash --version
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.


 
Rien que de très normal quoi, les ' protegent l'interpretation des variables et pas les ".


Message édité par MaxMaverick le 06-07-2004 à 21:29:46
n°516167
doncroco
Posté le 06-07-2004 à 23:44:51  profilanswer
 

oki merci bien, je v tester demain... il devait me manquer le -e ;)
Sympa :D

n°516260
doncroco
Posté le 07-07-2004 à 09:35:57  profilanswer
 

Bon ca marche nickel avec $USER... mais pas avec $PWD, ni $HOME :cry: (en fait pour dire la vérité j'ai besoin de changer le chemin d'accès à plein de fichiers... mais je trouvais que toto qui porte des tutu c'était plus drole ;)  
 
Est-ce que ca pourrais venir du fait que j'ai la version 4.0.5 ... et pas la 4.1 ?


Message édité par doncroco le 07-07-2004 à 09:38:04
n°516261
doncroco
Posté le 07-07-2004 à 09:47:18  profilanswer
 

Ok, c'est bon.... j'ai compris pourquoi je pensais que ca marcherai pas avec PWD et HOME... c'est à cause du "/" qu'ils rajoutent et donc que sed ne comprend plus.... il me reste plus qu'à trouver comment protéger le "/" sans dénaturer le "$" ! Je v finir par passer par le c pour faire tt ca ;) Merci bien à tous pour votre aide :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Evaluation des variables d'environnement avec sed

 

Sujets relatifs
debian : installer environnementLes variables d'environnement... (PATH...)
Pb variable environnement sous redhat 8variables d'environnement apache
[shell] Variables INCLUDE et LIBRARY ? (qqchose comme cà)[LINUX] Variables d'environnement
passer des variables shell à sed 
Plus de sujets relatifs à : Evaluation des variables d'environnement avec sed


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