Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad

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

ak37 #3 a écrit :

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 big_smile

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

Hors ligne

#11 Le 09/01/2013, à 11:44

tiramiseb

Re : Probleme sed

... nos réponses se sont croisées smile

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

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 smile

tiramiseb a écrit :

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)

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