Substring

Résolu
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'essaye le code suivant qui est censé me retourner, à partir du 7ème caractère, 3 caractères.
Mais il me retourne une erreur : ${stringZ:3:7}: bad substitution

stringZ=abcABC123ABCabc
echo ${stringZ:3:7}

quelqu'un connait-il une fonction qui peut me retourner par exemple, une partie, les 3 caractères de gauche, les 2 de droite, ... ?
Configuration: Windows XP
Firefox 3.5.5

10 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Quel shell ? Quel système ?
    0
  2. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Sous Unix
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Quel shell ?
      0
  3. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    ?? Je sais pas ... Il y a un moyen de le savoir, une fonction à lancer ?
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    echo $SHELL
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    /bin/csh
    0
  7. jivef Messages postés 1024 Statut Membre 306
     
    Bonjour,

    Il y a certaines choses qu'on ne peut pas faire sous tous les interpréteurs de commande, même si, globalement ils sont tous très puissants, ils ont leurs spécificités.

    Je ne sais pas sous quel Unix tu es, mais est-ce que tu as la possibilité de passer en bash ?
    Sous Solaris par exemple, on peut , sous Mac OS X également.
    Mais sous d'autres Unix, je ne sais pas s'il est installé par défaut.

    Mais peut-être es-tu obligé de faire ton script en csh ?

    En fait, en bash, voici ce que donne ta syntaxe :

    jonas@debian:~$ stringZ=abcABC123ABCabc
    jonas@debian:~$ echo ${stringZ:3:7}
    ABC123A

    J'ai fait quelques essais pour bien décomposer.

    Je compte après le 3eme
    jonas@debian:~$ echo ${stringZ:3}
    ABC123ABCabc

    Je compte après le 7eme
    jonas@debian:~$ echo ${stringZ:7}
    23ABCabc

    Ta manipulation, en bash...
    jonas@debian:~$ echo ${stringZ:3:7}
    ABC123A
    Je compte 7 après avoir sauté 0 caractère (entre :: il y a "rien")
    jonas@debian:~$ echo ${stringZ::7}
    abcABC1

    Je n'ai eu aucun message d'erreur, mais en csh il y a des différences significatives.

    C shell,
    Seychelles
    ou
    Sea Shell...

    Moi aussi je vis sur une île !

    A plus.
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    une manipulation indépendante du shell
    $ echo $stringZ | awk '{print substr($1,4,7)}'
    ABC123A
    0
  9. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Merci dubceck,
    ça fonctionne ! Cool,
    mais comment je fais pour changer les valeurs de 4 et 7 pour respecter l'exemple ?
    Comme ceci ? >

    stringZ=abcABC123ABCabc
    Depart=4
    Longueur=7

    result=$( echo $stringZ $Depart $Longueur | awk '{print substr($1,$2,$3)}' )
    0
  10. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    C'est ok, j'ai réessayé et ça fonctionne. merci ;-)
    0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    ou comme ça
    stringZ=abcABC123ABCabc
    Depart=4
    Longueur=7
    result=$(echo $stringZ | awk '{print substr($1,'"$Depart"','"$Longueur"')}')
    ou
    result=$(echo $stringZ  | awk -v d=$Depart -v l=$Longueur  '{print substr($1,d,l)}' )
    ou
    result=$(echo $stringZ  | awk  '{print substr($1,d,l)}' d=$Depart  l=$Longueur )
    
    0