On Fri, Aug 13, 2004 at 12:02:50AM +0200, F�lix Hauri wrote:
> On Thu, Aug 12, 2004 at 01:44:47AM +0200, St�phane Graber wrote:
> > Le Thu, Aug 12, 2004 at 01:16:31AM +0200, WaVeR a ecrit :
Je m'aper�ois que je r�pond aux r�ponses mais pas directement � la question
...
> > > Le jeu 12/08/2004 � 00:37, Chris De Bleu a �crit :
> > > > bonjour,
> > > >
> > > > Sous bash, j'ai recupere de la lecture d'un fichier la
> > > > ligne suivante
> > > > dd 2 2 0 40 ~488 40 POB /dev/chunk
> > > > et je voudrais lire le nombre 488. J'ai fait ceci
> > > >
> > > > nn=`head -1 myfile |awk '{print $6}'`
> > > >
> > > > le probleme, c'est que j'obtiens ~488 et c'est normal.
> > > >
> > > > Comment faire pour avoir seulement 488?
La question �tait:
``comment me d�barasser d'un caract�re encombrant dans une chaine en bash?''
La man page de bash est assez lourde, mais dans le chapitre ``EXPANSION''
(je regarde la version fran�aise de la man page), tu trouveras un sous-chapitre
``Remplacement des param�tres'', dans lequel tu verra les syntaxes:
--- extrait de man bash ---
${param�tre#mot}
${param�tre##mot}
Le mot est d�velopp� pour fournir un motif, comme dans l'expansion des noms
de fichiers. Si le motif correspond au debut de la valeur du param�tre, alors
le d�veloppement prend la valeur du param�tre apr�s suppression du plus
petit motif commun (cas ``#''), ou du plus long motif (cas ``##'')....
...
${param�tre%mot}
${param�tre%%mot}
...
--- fin d'extrait ---
dont l'effet sera la m�me mais � partir de la fin.
Dans ton cas, le ``~'' �tant un mot r�serv�, tu devras l'�chaper: ``\~''.
${nn#\~}
Si tu n'est pas s�r de la pr�sence d'un tilde, mais que cela puisse �tre un autre
caract�re, alors:
${nn#?}
Autre m�thode, juste un poil plus t�t dans le m�me chapitre, l'explication de
--- extrait de man bash ---
${param�tre:d�but}
${param�tre:d�but:longueur}
Extraction de sous-cha�ne Se d�veloppe pour fournir la sous-cha�ne de la
*longueur* indiqu�e (en caract�res) commen�ant par *d�but*.
--- fin d'extrait ---
Soit, dans ton cas,
${nn:1}
> 1: Uniquement bash (sans autre binaire: head, awk, sed, etc.):
> $ read -a nn <myfile
> $ echo ${nn[5]#\~}
> 488
ou selon ce que je viens de dire:
$ read -a nn <myfile
$ echo ${nn[5]:1}
488
Comme quoi, il n'y a pas qu'une solution...
--
F�lix Hauri - <[EMAIL PROTECTED]> - http://www.f-hauri.ch
_______________________________________________
gull mailing list
[EMAIL PROTECTED]
http://lists.alphanet.ch/mailman/listinfo/gull