Je bloque sur un problème que je qualifierais de "à la noix".
Je dois lire un fichier, et extraire en des valeurs. Pour cela j'ai fait un truc du genre :
cat fichier | grep machin | while read ligne ; do
variable=$(echo $ligne | sed 's/truc//')
echo "dans la boucle variable == $variable"
done
echo "maintenant variable == $variable"
Bon c'est un peu plus compliqué que ça mais ça suffit pour comprendre le problème.
Evident d'ailleurs : ma boucle est dans un sous-shell, donc variable est bien affectée mais elle est inconnue à l'extérieur de la boucle :
dans la boucle variable == valeur
maintenant variable ==
La question est donc : comment faire pour récupérer la valeur de variable à l'extérieur de la boucle ?
# export
Posté par B. franck . Évalué à 1.
déjà le
cat fichier | grep machin
on peut éviter un sous process par
grep machin fichier
mais je taperais un ptit coup de perl pour éviter le gloubiboulga...
#!/usr/bin/perl -w
# script: remptruc.pl
while(<>){
chomp;
s/truc//;
print "$_\n";
}
usage: remptruc.pl fichier
# Plus simple
Posté par Ph Husson (site web personnel) . Évalué à 2.
for i in `grep machin fichier`;do
XYZ
done
Enfin ca marche si tes lignes n'ont pas d'espaces
[^] # Re: Plus simple
Posté par Naha (site web personnel) . Évalué à 1.
# lecture d'un fichier
Posté par foulmetal canette (site web personnel) . Évalué à 2.
grep sait se débrouiller tout seul comme un grand : grep machin fichier ça fait tout pareil et ça retarde le syndrome du canal carpien* ;)
Bon, je sais pas si c'est très bien optimisé, voici une solution :
je_boucle=1
# on récupère le echo $variable dans variable
variable=$(grep machin | while ((je_boucle)); do
read ligne
# si la ligne est vide, on arrête la boucle et on affiche la valeur de variable
if [ -z "$ligne" ]; then
je_boucle=0
echo $variable # variable == valeur
else
variable=$(echo $ligne | sed 's/truc//') # variable = valeur
fi
done)
echo "maintenant variable == $variable" # ça écrit valeur
* : http://www.algo.be/ergo/risques.htm(...)
# compléments d'explication
Posté par Naha (site web personnel) . Évalué à 1.
[^] # Re: compléments d'explication
Posté par foulmetal canette (site web personnel) . Évalué à 2.
[^] # Re: compléments d'explication
Posté par Naha (site web personnel) . Évalué à 1.
A noter que cette astuce marche sous bash mais pas sous sh : "Syntax error: redirection unexpected".
Je n'ai pas essayé d'autres interpréteurs.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.