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 12/12/2006, à 23:10

ludovic85

Question de paramètre sur sed

Bonjour,

voici mon bout de 'code' :

sed -e 's/sPiG[0-999]/`$1`/' /boot/grub/menu.lst > /home/ludo/testScript/caca.temp

Mon problème est que je n'arrive pas a récupérer le paramètre passé ($1) sad

Si quelqu'un a une idée pour pouvoir récupérer des paramètres avec sed ca serait cool ^^:rolleyes:

Hors ligne

#2 Le 12/12/2006, à 23:12

jr95

Re : Question de paramètre sur sed

Avec

sed -e "s/sPiG[0-999]/$1/" /boot/grub/menu.lst > /home/ludo/testScript/caca.temp

cela devrait fonctionner.

Hors ligne

#3 Le 12/12/2006, à 23:20

ludovic85

Re : Question de paramètre sur sed

argh ca ne fonctionne pas snif ... sed me prend $1 comme une chaine hmm

Hors ligne

#4 Le 12/12/2006, à 23:21

ludovic85

Re : Question de paramètre sur sed

argh oups ca marche impec erreur de débutant sorry

MERCI ^^

Dernière modification par ludovic85 (Le 12/12/2006, à 23:21)

Hors ligne

#5 Le 13/12/2006, à 00:55

kaworu

Re : Question de paramètre sur sed

sed -e "s/sPiG[0-999]/$1/" /boot/grub/menu.lst > /home/ludo/testScript/caca.temp

dans ce cas là, c'est pas sed mais bash (ou ton shell) qui va faire la substitution (juste pour info).


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#6 Le 13/12/2006, à 01:01

ludovic85

Re : Question de paramètre sur sed

kaworu a écrit :
sed -e "s/sPiG[0-999]/$1/" /boot/grub/menu.lst > /home/ludo/testScript/caca.temp

dans ce cas là, c'est pas sed mais bash (ou ton shell) qui va faire la substitution (juste pour info).

je n'ai pas bien compris ce que tu veux dire ...
Au début j'utilisais awk mais j'ai trouvé ca un peut démesuré j'ai donc choisi d'utiliser sed d'ailleur voila ma nouvelle commande :

sed -e "s/.*\.xpm\.gz$/$exp1/" /boot/grub/menu.lst > caca.temp

Hors ligne

#7 Le 13/12/2006, à 01:18

kaworu

Re : Question de paramètre sur sed

ludovic85 a écrit :

je n'ai pas bien compris ce que tu veux dire ...
Au début j'utilisais awk mais j'ai trouvé ca un peut démesuré j'ai donc choisi d'utiliser sed d'ailleur voila ma nouvelle commande :

sed -e "s/.*\.xpm\.gz$/$exp1/" /boot/grub/menu.lst > caca.temp

Bon c'est un peu compliqué. disont que je commence le script comme ça :
exp1="perlinpin"
Ta ligne que tu envoie, est d'abord interprétée par bash, qui appel à son tour sed. ce que tu envoie à bash c'est :

sed -e "s/.*\.xpm\.gz$/$exp1/" /boot/grub/menu.lst > caca.temp

et ce que bash envoie à sed c'est :

sed -e "s/.*\.xpm\.gz$/perlinpin/" /boot/grub/menu.lst > caca.temp

ton erreur (à la base) c'est que tu mettait des 'simple quote' et que donc bash ne faisait pas la substitution.
Tout ça pour dire, fais attention à ne pas mélanger, pour sed un $ signifie fin de ligne, pour bash $qqch signifie la variable "qqch".

Dernière modification par kaworu (Le 13/12/2006, à 01:19)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#8 Le 13/12/2006, à 11:43

ludovic85

Re : Question de paramètre sur sed

ok je comprend un peut mieux.

Par ailleur j'ai un nouveau probleme de débutant avec ma boucle suivant :

cpt=0

ls -h | while read ligne;
	do
	tableau[$cpt]="$i"
	cpt=$(($cpt + 1 ))
	 
done

le probleme est que bash interprete la valeur de $i comme une commande.
Du coup j'ai cette erreur :

randomFich.sh: 13: tableau[0]=finalRandomizeSplash.sh: not found
randomFich.sh: 13: tableau[1]=randomFich.sh: not found
randomFich.sh: 13: tableau[2]=test2.sh: not found

Dernière modification par ludovic85 (Le 13/12/2006, à 12:09)

Hors ligne

#9 Le 13/12/2006, à 12:29

ludovic85

Re : Question de paramètre sur sed

bon bein j'ai trouvé une solution peut élégante :

	echo "tableau[$cpt]=$ligne"

Hors ligne

#10 Le 13/12/2006, à 14:10

kaworu

Re : Question de paramètre sur sed

ludovic85 a écrit :

ok je comprend un peut mieux.

Par ailleur j'ai un nouveau probleme de débutant avec ma boucle suivant :

cpt=0

ls -h | while read ligne;
	do
	tableau[$cpt]="$i"
	cpt=$(($cpt + 1 ))
	 
done

le probleme est que bash interprete la valeur de $i comme une commande.
Du coup j'ai cette erreur :

randomFich.sh: 13: tableau[0]=finalRandomizeSplash.sh: not found
randomFich.sh: 13: tableau[1]=randomFich.sh: not found
randomFich.sh: 13: tableau[2]=test2.sh: not found

heu, 2 choses importantes.
1) pour les tableaux c'est un peu galère en Bash
2) pour le read, faut pas utiliser un pipe ! Car le pipe fait "comme" un sous-shell et les variables que tu vas initialiser dans le pipe ne seront pas accessible plus tard. Il faut plutôt une construction comme cela :

while read line ; do
     # ... ce que tu veux traiter
done < <(ls -h)

Je te conseil de suivre l'excellent (peut-être trop complet) Advanced Bash Scripting que tu peux trouver en français à cette adresse :
http://abs.traduc.org/
Voici un lien direct vers la sections sur les tableaux :
http://abs.traduc.org/abs-4.1-fr/ch26.html
Et voici le lien (sur les substitutions de processus) qui explique pourquoi il vaut mieux faire substitution de processus dans ton cas au lieu d'un "pipe" :
http://abs.traduc.org/abs-4.1-fr/ch22.html (à la fin)

Bonne continuation !

Dernière modification par kaworu (Le 13/12/2006, à 14:11)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#11 Le 13/12/2006, à 14:14

ludovic85

Re : Question de paramètre sur sed

Merci beaucoup du coup j'ai résolue mon problème, par ailleur le Advanced Bash Scripting m'a beaucoup aidé ^^

Hors ligne