Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[OFF] petite question de scripting (résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
arma
Apprentice
Apprentice


Joined: 07 Nov 2004
Posts: 198
Location: Belgium

PostPosted: Wed Dec 28, 2005 11:12 pm    Post subject: [OFF] petite question de scripting (résolu) Reply with quote

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
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1896
Location: 127.0.0.1

PostPosted: Wed Dec 28, 2005 11:52 pm    Post subject: Reply with quote

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 :
Code:
eval $TOTO
Back to top
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Thu Dec 29, 2005 12:06 am    Post subject: Reply with quote

si tu veux retrouver tes retours a la ligne, essaye de faire ça :

Code:
IFS=""
avant le echo -e $TOTO
_________________
$ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join'
Back to top
View user's profile Send private message
arma
Apprentice
Apprentice


Joined: 07 Nov 2004
Posts: 198
Location: Belgium

PostPosted: Thu Dec 29, 2005 12:16 am    Post subject: Reply with quote

WOoow 8O

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
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Dec 29, 2005 12:26 am    Post subject: Reply with quote

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
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Thu Dec 29, 2005 12:30 am    Post subject: Reply with quote

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
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Thu Dec 29, 2005 7:19 am    Post subject: Reply with quote

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). :wink:
_________________
I never think of the future. It comes soon enough.
Albert Einstein

Try simpler first
Shockley
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Thu Dec 29, 2005 6:17 pm    Post subject: Reply with quote

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
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Dec 29, 2005 6:18 pm    Post subject: Reply with quote

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à... :oops:
Back to top
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Thu Dec 29, 2005 7:34 pm    Post subject: Reply with quote

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
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Fri Dec 30, 2005 1:28 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum