Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Le problème, ce n'est pas case, c'est bash. Pour des tâches un tant soit peu complexes, il vaut mieux utiliser un vrai langage.
Bruno Tréguier
Le 20/07/2011 11:46, Kevin Denis a écrit :
Bonjour,
j'ai une variable texte contenant une ligne avec des espaces et différents caractères.
J'ai besoin de parser cette ligne car différentes actions doivent être prises selon le début de celle ci.
J'ai choisi d'utiliser case/esac: case $LINE in aaa*) do_aaa ;; bbb*) do_bbb ;; esac
Mais j'ai un problème pour différencier: aaa blablabla aaaaa blablabla
Et mes tentatives à base de: aaa .*) do_aaa ;; ne fonctionnent pas.
Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS (comme l'espace) et que c'est le premier mot qui détermine le traitement, vous pouvez toujours contourner le problème en utilisant un artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et suivants
case $1 in aaa) do_aaa ;; etc.
-- Bruno Tréguier
Le 20/07/2011 11:46, Kevin Denis a écrit :
Bonjour,
j'ai une variable texte contenant une ligne avec des espaces et différents
caractères.
J'ai besoin de parser cette ligne car différentes actions doivent être
prises selon le début de celle ci.
J'ai choisi d'utiliser case/esac:
case $LINE in
aaa*)
do_aaa
;;
bbb*)
do_bbb
;;
esac
Mais j'ai un problème pour différencier:
aaa blablabla
aaaaa blablabla
Et mes tentatives à base de:
aaa .*)
do_aaa
;;
ne fonctionnent pas.
Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS
(comme l'espace) et que c'est le premier mot qui détermine le
traitement, vous pouvez toujours contourner le problème en utilisant un
artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et
suivants
j'ai une variable texte contenant une ligne avec des espaces et différents caractères.
J'ai besoin de parser cette ligne car différentes actions doivent être prises selon le début de celle ci.
J'ai choisi d'utiliser case/esac: case $LINE in aaa*) do_aaa ;; bbb*) do_bbb ;; esac
Mais j'ai un problème pour différencier: aaa blablabla aaaaa blablabla
Et mes tentatives à base de: aaa .*) do_aaa ;; ne fonctionnent pas.
Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS (comme l'espace) et que c'est le premier mot qui détermine le traitement, vous pouvez toujours contourner le problème en utilisant un artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et suivants
case $1 in aaa) do_aaa ;; etc.
-- Bruno Tréguier
Philippe Naudin
Le mer 20 jui 2011 14:43:43 CEST, Bruno Tréguier a écrit:
Le 20/07/2011 11:46, Kevin Denis a écrit : > Bonjour, > > j'ai une variable texte contenant une ligne avec des espaces et diffé rents > caractères. > > J'ai besoin de parser cette ligne car différentes actions doivent ê tre > prises selon le début de celle ci. > > J'ai choisi d'utiliser case/esac: > case $LINE in > aaa*) > do_aaa > ;; > bbb*) > do_bbb > ;; > esac > > Mais j'ai un problème pour différencier: > aaa blablabla > aaaaa blablabla > > Et mes tentatives à base de: > aaa .*) > do_aaa > ;; > ne fonctionnent pas. > > Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS (comme l'espace) et que c'est le premier mot qui détermine le traitement, vous pouvez toujours contourner le problème en utilisant un artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et suivants
case $1 in aaa) do_aaa ;; etc.
Et aussi : for LINE in "aaa blablabla" "aaaaa blablabla" ; do case "$LINE" in aaa *) echo $LINE : 3a ;; aaa*) echo $LINE : 5a ;; esac done
-- Philippe
Le mer 20 jui 2011 14:43:43 CEST, Bruno Tréguier a écrit:
Le 20/07/2011 11:46, Kevin Denis a écrit :
> Bonjour,
>
> j'ai une variable texte contenant une ligne avec des espaces et diffé rents
> caractères.
>
> J'ai besoin de parser cette ligne car différentes actions doivent ê tre
> prises selon le début de celle ci.
>
> J'ai choisi d'utiliser case/esac:
> case $LINE in
> aaa*)
> do_aaa
> ;;
> bbb*)
> do_bbb
> ;;
> esac
>
> Mais j'ai un problème pour différencier:
> aaa blablabla
> aaaaa blablabla
>
> Et mes tentatives à base de:
> aaa .*)
> do_aaa
> ;;
> ne fonctionnent pas.
>
> Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS
(comme l'espace) et que c'est le premier mot qui détermine le
traitement, vous pouvez toujours contourner le problème en utilisant un
artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et
suivants
case $1 in
aaa)
do_aaa
;;
etc.
Et aussi :
for LINE in "aaa blablabla" "aaaaa blablabla" ; do
case "$LINE" in
aaa *)
echo $LINE : 3a
;;
aaa*)
echo $LINE : 5a
;;
esac
done
Le mer 20 jui 2011 14:43:43 CEST, Bruno Tréguier a écrit:
Le 20/07/2011 11:46, Kevin Denis a écrit : > Bonjour, > > j'ai une variable texte contenant une ligne avec des espaces et diffé rents > caractères. > > J'ai besoin de parser cette ligne car différentes actions doivent ê tre > prises selon le début de celle ci. > > J'ai choisi d'utiliser case/esac: > case $LINE in > aaa*) > do_aaa > ;; > bbb*) > do_bbb > ;; > esac > > Mais j'ai un problème pour différencier: > aaa blablabla > aaaaa blablabla > > Et mes tentatives à base de: > aaa .*) > do_aaa > ;; > ne fonctionnent pas. > > Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS (comme l'espace) et que c'est le premier mot qui détermine le traitement, vous pouvez toujours contourner le problème en utilisant un artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et suivants
case $1 in aaa) do_aaa ;; etc.
Et aussi : for LINE in "aaa blablabla" "aaaaa blablabla" ; do case "$LINE" in aaa *) echo $LINE : 3a ;; aaa*) echo $LINE : 5a ;; esac done