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

Répondre à