Extraction chaîne de caractères dans Shell
PatMh
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
alf -
alf -
Bonjour,
J'ai besoin d'une petite aide sous shell, svp.
Je désire extraire les caractères 1 par 1 ou par bloc (caract 2 à 5 par exemple) dans le contenu de cette chaîne de caractères suivante.
TEST=/etc/machin:/etc/truc
Mon intention réelle est de récupérer
/etc/machin dans une variable
/etc/truc dans une autre variable.
Je pense utiliser une boucle for sachant le nombre de caractères par len=${#TEST}
Merci de votre aide pour mettre dans la bonne voie.
@+
Pat
J'ai besoin d'une petite aide sous shell, svp.
Je désire extraire les caractères 1 par 1 ou par bloc (caract 2 à 5 par exemple) dans le contenu de cette chaîne de caractères suivante.
TEST=/etc/machin:/etc/truc
Mon intention réelle est de récupérer
/etc/machin dans une variable
/etc/truc dans une autre variable.
Je pense utiliser une boucle for sachant le nombre de caractères par len=${#TEST}
Merci de votre aide pour mettre dans la bonne voie.
@+
Pat
A voir également:
- Bash extraire chaîne de caractère
- Caractère ascii - Guide
- Extraire une video youtube - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Extraire le son d'une vidéo - Guide
30 réponses
Bonjour,
Je n'ai pas tout compris (je suis pas spécialsite) mais il semble que cela marche chez moi :
[bob 33] Desktop > cat tutu
MT0707
[11:43 0.56]
[bob 34] Desktop > env=`cat tutu`
[11:44 0.40]
[bob 35] Desktop > echo $env
MT0707
[11:44 0.37]
[bob 36] Desktop > echo ${env:2:4}
0707
[11:44 0.29]
[bob 37] Desktop >
si ça peut aider ....
:-))
Je n'ai pas tout compris (je suis pas spécialsite) mais il semble que cela marche chez moi :
[bob 33] Desktop > cat tutu
MT0707
[11:43 0.56]
[bob 34] Desktop > env=`cat tutu`
[11:44 0.40]
[bob 35] Desktop > echo $env
MT0707
[11:44 0.37]
[bob 36] Desktop > echo ${env:2:4}
0707
[11:44 0.29]
[bob 37] Desktop >
si ça peut aider ....
:-))
Merci Bob, tu fais ça directement en ligne de commande c'est ça ?
Quand je fais la même chose, la dernière commande ne marche pas, il continue de me renvoyer
ksh: ${env:2:4}: 0403-011 Substitution non valide pour cette commande
OK j'ai donc un problème autre qu'un problème de syntaxe :( je ne sais pas trop comment je vais voir cela mais merci à vous lami et bob.
Fred
Quand je fais la même chose, la dernière commande ne marche pas, il continue de me renvoyer
ksh: ${env:2:4}: 0403-011 Substitution non valide pour cette commande
OK j'ai donc un problème autre qu'un problème de syntaxe :( je ne sais pas trop comment je vais voir cela mais merci à vous lami et bob.
Fred
Merci Bob, tu fais ça directement en ligne de commande c'est ça ?
oui oui directement en ligne de commande dans la console.
ksh: ${env:2:4}:
peut-être parce que tu es en "ksh" (je suis en "sh")
:-))
oui oui directement en ligne de commande dans la console.
ksh: ${env:2:4}:
peut-être parce que tu es en "ksh" (je suis en "sh")
:-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
En ksh :
En ksh :
$ var="MT0707" $ echo ${var:2} 0707 $ var="MT070728" $ echo ${var:2} 070728 $ echo ${var: -2} 28 $;-))
LA SOLUTION !!!!!
Merci encore Bob et jipicy mais je n'arrive vraiment pas à faire fonctionner cette commande.
Par contre je viens de trouver une solution, si quelqu'un a le même problème que moi, la voilà :
On peut utiliser la commande cut -c sur un fichier !!!
Donc pour extraire une chaine de cractère d'une autre chaine de caractère xxx , il suffit de faire :
echo $xxx > fichiertemp
resultat= `cut -c 2-3 fichiertemp`
et voilà je récupère mon extrait de chaine dans resultat !!! (pour moi c'est encore mieux parce que suis deja dans un fichier donc ça me raccourcit le script).
:)
Merci à tous, bonne journée
Merci encore Bob et jipicy mais je n'arrive vraiment pas à faire fonctionner cette commande.
Par contre je viens de trouver une solution, si quelqu'un a le même problème que moi, la voilà :
On peut utiliser la commande cut -c sur un fichier !!!
Donc pour extraire une chaine de cractère d'une autre chaine de caractère xxx , il suffit de faire :
echo $xxx > fichiertemp
resultat= `cut -c 2-3 fichiertemp`
et voilà je récupère mon extrait de chaine dans resultat !!! (pour moi c'est encore mieux parce que suis deja dans un fichier donc ça me raccourcit le script).
:)
Merci à tous, bonne journée
Salut
Merci de vos réponses.
J'ai fait les manips mais je ne comprends pas tout.
Pourriez-vous m'éclairer un petit peu, svp ?
J'ai complété ma variable pour pouvoir traiter un cas qui serait ni en début et ni en fin de chaîne.
Ce qui donne :
TEST=/etc/machin:/etc/truc:/etc/bidule
J'ai donc fait
$ machin=${TEST%%:*}
$ echo machin
$ /etc/machin
$ truc=${TEST%:*}
$ echo truc
$ /etc/machin:/etc/truc
$ bidule=${TEST##:*}
$ echo bidule
$ /etc/bidule
Je pense avoir compris que % correspond à un bloc et que quand on met # on saute autant de bloc ?
Mais comment fait-on pour extraire du 2ème au 5ème caractère dans TEST, svp ?
Mon intention est de traiter la chaîne en commençant de n'importe où et en prenant un ou plusieurs caractères.
Cela pourra me servir pour srcuter une chaîne caratère par caractère ou bien en prélever qu'une partie bien définie.
Et enfin avec vos explications complémentaires sur l'usage de % et # je srai débloqué.
Merci encore pour vos compléments.
Pat
Merci de vos réponses.
J'ai fait les manips mais je ne comprends pas tout.
Pourriez-vous m'éclairer un petit peu, svp ?
J'ai complété ma variable pour pouvoir traiter un cas qui serait ni en début et ni en fin de chaîne.
Ce qui donne :
TEST=/etc/machin:/etc/truc:/etc/bidule
J'ai donc fait
$ machin=${TEST%%:*}
$ echo machin
$ /etc/machin
$ truc=${TEST%:*}
$ echo truc
$ /etc/machin:/etc/truc
$ bidule=${TEST##:*}
$ echo bidule
$ /etc/bidule
Je pense avoir compris que % correspond à un bloc et que quand on met # on saute autant de bloc ?
Mais comment fait-on pour extraire du 2ème au 5ème caractère dans TEST, svp ?
Mon intention est de traiter la chaîne en commençant de n'importe où et en prenant un ou plusieurs caractères.
Cela pourra me servir pour srcuter une chaîne caratère par caractère ou bien en prélever qu'une partie bien définie.
Et enfin avec vos explications complémentaires sur l'usage de % et # je srai débloqué.
Merci encore pour vos compléments.
Pat