View previous topic :: View next topic |
Author |
Message |
arma Apprentice
Joined: 07 Nov 2004 Posts: 198 Location: Belgium
|
Posted: Wed Dec 28, 2005 11:12 pm Post subject: [OFF] petite question de scripting (résolu) |
|
|
salut tt le monde
je suis sur une petite impasse en scripting bash
admettons que je place dans une varaible le contenu d'un fichier duquel j'ai extrait les lignes qui ne m'intéresse pas
Code: | TOTO=`cat -n toto.txt |grep tutu`
|
nous sommes bien d'accord que si j'exécute la commande cat , j'ai un affichage ligne par ligne
Code: | 12 tutu blablabla
24 tutu toto
45 tutu mickey |
mon problème est que je voudrai accéder au contnu de cette variable plus loin dans le script
Code: | echo -e $TOTO
12 tutu blablabla 24 tutu toto 45 tutu mickey
|
on voit le problème tt de suite, c'est sur une seule ligne... mais ou sont donc passés mes saut de lignes ?
je sais que ce n'est pas un forum sur le scripting (dsl d'avance) ... mais je n'en connais pas ... si qq'un peux m'en renseigner un, je prend aussi
merci d'avance _________________ l'alcool est un ennemi...
et en quelque sorte,...
fuir l'ennemi, c'est lâche
Last edited by arma on Thu Dec 29, 2005 12:17 am; edited 1 time in total |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1957 Location: 127.0.0.1
|
Posted: Wed Dec 28, 2005 11:52 pm Post subject: |
|
|
Salut,
Une solution (peut-être pas la meilleure) :
Code: |
TOTO='grep -n tutu toto.txt'
|
Pas besoin du cat, et on n'éxécute pas tout de suite : pour l'instant ce n'est qu'une chaîne de caractères.
Et quand tu as besoin d'afficher le résultat :
|
|
Back to top |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Thu Dec 29, 2005 12:06 am Post subject: |
|
|
si tu veux retrouver tes retours a la ligne, essaye de faire ça :
avant le echo -e $TOTO _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
arma Apprentice
Joined: 07 Nov 2004 Posts: 198 Location: Belgium
|
Posted: Thu Dec 29, 2005 12:16 am Post subject: |
|
|
WOoow
merci bcp, ça marche,
mais là il va falloir que tu m'explique d'où vient ce 'magic' IFS _________________ l'alcool est un ennemi...
et en quelque sorte,...
fuir l'ennemi, c'est lâche |
|
Back to top |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Thu Dec 29, 2005 12:26 am Post subject: |
|
|
Internal Field Separator, sa valeur par défaut est "<space><tab><newline>" ce qui veut dire que lesdites séquences sont remplacées par une notion unique de séparateur. en gros si tu avais mis IFS="<space><tab>" les retours à la ligne auraient été conservés mais les tabs et espaces auraient toujours été traités de la même manière. Je crois que le séparateur substitué est de 2 espaces.
edit : heu oui field pas file -> dodo moi!
Last edited by Enlight on Thu Dec 29, 2005 12:34 am; edited 2 times in total |
|
Back to top |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Thu Dec 29, 2005 12:30 am Post subject: |
|
|
IFS c'est Internal Field Separator, cette variable definie comment bash gere les champs (en gros qu'est-ce qui separe les arguments).
Par defaut, le separateur est "tous les blancs" (espace, tab, retour a la ligne). En faisant IFS="" (on aurait pu faire IFS=" " aussi), on a dit que le retour a la ligne n'etait plus un "separateur", ce qui fait que pour bash, "retour a la ligne" n'est plus un simple "espace entre 2 elements", et le considere donc comme un vrai retour a la ligne.
Enfin je sais pas si je me fais comprendre, des fois je m'embrouille moi meme ! Enfin si tu n'as pas installer le abs-guide tu peux toujours le lire ici : http://www.tldp.org/LDP/abs/abs-guide.pdf ou l'emerger
Ca explique plein de trucs pour bash !
Amicalement, _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Thu Dec 29, 2005 7:19 am Post subject: |
|
|
sinon une autre solution consiste à utiliser un "vrai" outil de parsage de fichier texte tel que awk (qui est super puissant soit dit en passant).
mais évidement ça te fait refaire tout ton script en awk (ou du moins une grosse partie). _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Thu Dec 29, 2005 6:17 pm Post subject: |
|
|
euh je crois que le plus simple c'est quand même de faire echo -e "$TOTO" , avec des guillemets autour du $TOTO ... et de mettre partout des guillemets autour du $TOTO dans ton script _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Thu Dec 29, 2005 6:18 pm Post subject: |
|
|
scout wrote: | euh je crois que le plus simple c'est quand même de faire echo -e "$TOTO" , avec des guillemets autour du $TOTO ... et de mettre partout des guillemets autour du $TOTO dans ton script |
j'ai un grand moment de solitude là... |
|
Back to top |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Thu Dec 29, 2005 7:34 pm Post subject: |
|
|
scout wrote: | euh je crois que le plus simple c'est quand même de faire echo -e "$TOTO" , avec des guillemets autour du $TOTO ... et de mettre partout des guillemets autour du $TOTO dans ton script |
LOL scout au taquet _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Fri Dec 30, 2005 1:28 am Post subject: |
|
|
erf, on y pense pas assez souvent a la puissance des " " ... merci scout
Pourquoi faire simple quand on peut faire compliqué me direz vous ... ^^; _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
|