Pages : 1
#1 Le 09/01/2013, à 11:10
- ak37
Probleme sed
Bonjour à tous, j'ai un soucis et je ne parviens pas à comprendre pourquoi ça ne fonctionne pas!
Ce qui me met en rogne depuis ce matin
Un bout de script qui m'extrait les adresses ip et hostname d'un fichier xml en fonction du trigramme passé en entré
Puis qui me les copies dans un fichier plateForme.info, fichier qui est ensuite utilisé dans un script perl pour configurer la bête... Bref voici mon soucis
part= grep $1 mis.xml | sed '1,2d' | sed '2,6d' | awk -F"\"" '{OFS="" ; print""$4,"|"$6}'
sed -i -e 's/ipcalculateur|nomcalculateur/'"$part"'/' plateForme.info
Il semble interpréter la variable $part comme ci elle était vide... or elle ne l'est pas bien évidemment
J'ai aussi essayé ça
sed -i -e "s/ipcalculateur|nomcalculateur/$part/" plateForme.info
Si l'un d'entre vous a une idée, c'est pas de refus !
Hors ligne
#2 Le 09/01/2013, à 11:12
- pingouinux
Re : Probleme sed
Bonjour,
Je n'ai pas épluché la commande, mais voici le principe :
part=$(grep $1 mis.xml | sed '1,2d' | sed '2,6d' | awk -F"\"" '{OFS="" ; print""$4,"|"$6}')
Hors ligne
#3 Le 09/01/2013, à 11:16
- ak37
Re : Probleme sed
Merci beaucoup!
Mais alors pourquoi sans le $() ma variable contient quand même bien les chaines voulue ?
Hors ligne
#4 Le 09/01/2013, à 11:20
- pingouinux
Re : Probleme sed
Mais alors pourquoi sans le $() ma variable contient quand même bien les chaines voulue ?
Ça me surprendrait beaucoup.
Ajouté : En fait, tu vois la sortie de la commande, mais un echo "$part" sera vide
Dernière modification par pingouinux (Le 09/01/2013, à 11:22)
Hors ligne
#5 Le 09/01/2013, à 11:26
- ak37
Re : Probleme sed
Non justement un echo $part me retourne bien 193.0.22.96|calc2tri d'où mon incompréhension...
Dernière modification par ak37 (Le 09/01/2013, à 11:26)
Hors ligne
#6 Le 09/01/2013, à 11:29
- pingouinux
Re : Probleme sed
Dans ce cas, je ne comprends pas. Peux-tu faire un copier-coller des commandes dans le terminal et du résultat ? Tu es bien en bash ?
Hors ligne
#7 Le 09/01/2013, à 11:35
- ak37
Re : Probleme sed
Oui bien sur! Je suis sous bash (testé sous redhat et ubuntu)
Un exemple similaire bidon
#!/bin/bash
test= grep root /etc/passwd | awk -F":" '{print""$4,""$6}'
echo $test
pi@pi-vm: ./test/sh
0 /root
Ajout : Même résultat en sh, bash, ksh
Dernière modification par ak37 (Le 09/01/2013, à 11:38)
Hors ligne
#8 Le 09/01/2013, à 11:41
- pingouinux
Re : Probleme sed
Ce que tu vois n'est pas le résultat du echo, c'est la sortie du grep.
Pour t'en persuader, modifie ton script ainsi :
#!/bin/bash
test= grep root /etc/passwd | awk -F":" '{print""$4,""$6}'
echo "test=$test="
Hors ligne
#9 Le 09/01/2013, à 11:43
- ak37
Re : Probleme sed
A oui en effet... le echo ne retournait rien en fait... d’où le champ vide après le résultat de la commande
Je te remercie d'avoir pris le temps de m'expliquer. Ça ne risquait pas de fonctionner....
Hors ligne
#10 Le 09/01/2013, à 11:43
- tiramiseb
Re : Probleme sed
Tout à fait d'accord avec pingouinux. D'ailleurs la sortie de ton exemple bidon, je suis sûr qu'elle n'est pas :
pi@pi-vm: ./test/sh
0 /root
mais qu'elle est :
pi@pi-vm: ./test/sh
0 /root
... avec une ligne vide, qui correspond à ton "echo $test" qui affiche une chaîne vide
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#11 Le 09/01/2013, à 11:44
- tiramiseb
Re : Probleme sed
... nos réponses se sont croisées
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#12 Le 09/01/2013, à 11:47
- tiramiseb
Re : Probleme sed
En fait tu peux assigner des valeurs à des variables avant l'exécution d'une commande.
Par exemple pour exécuter la calculatrice de GNOME sans ses traductions (donc a priori en anglais), tu peux exécuter :
LANG=C gnome-calculator
(en gros, "C" signifie "pas de traduction")
Avec ton "test= grep blablabla", tu as exécuté la commande grep avec la valeur "" (chaîne vide) assignée à la variable "test".
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 09/01/2013, à 11:48
- ak37
Re : Probleme sed
Donc j'aurais pu ecrire ça
part=$(grep $1 mis.xml | sed '1,2d' | sed '2,6d' | awk -F"\"" '{OFS="" ; print""$4,"|"$6}')
Comme ça ?
part=`grep $1 mis.xml | sed '1,2d' | sed '2,6d' | awk -F"\"" '{OFS="" ; print""$4,"|"$6}'`
Il y a t'il une différence à ce moment là?
Hors ligne
#14 Le 09/01/2013, à 11:49
- ak37
Re : Probleme sed
Ok je vois ! Je te remercie pour l'explication
En fait tu peux assigner des valeurs à des variables avant l'exécution d'une commande.
Par exemple pour exécuter la calculatrice de GNOME sans ses traductions (donc a priori en anglais), tu peux exécuter :
LANG=C gnome-calculator
(en gros, "C" signifie "pas de traduction")
Avec ton "test= grep blablabla", tu as exécuté la commande grep avec la valeur "" (chaîne vide) assignée à la variable "test".
Hors ligne
#15 Le 09/01/2013, à 11:51
- tiramiseb
Re : Probleme sed
La seule différence entre
`...`
et
$(...)
est que le second différencie le début de la fin, tu peux donc en imbriquer plusieurs, il est également plus facile à identifier dans une ligne.
La forme avec les " ` " est la forme historique, la seconde est plus récente (mais aujourd'hui les deux sont bien supportées un peu partout).
Dernière modification par tiramiseb (Le 09/01/2013, à 11:54)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#16 Le 09/01/2013, à 11:55
- ak37
Re : Probleme sed
Ok, merci vos explications!
C'est beaucoup plus clair maintenant !
Hors ligne
Pages : 1