Substring

Résolu
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. Contributeur
    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
    1. C'est ok, j'ai réessayé et ça fonctionne. merci ;-)
      0
      1. 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
        1. Contributeur
          une manipulation indépendante du shell
          $ echo $stringZ | awk '{print substr($1,4,7)}'
          ABC123A
          0
          1. 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
            1. ?? Je sais pas ... Il y a un moyen de le savoir, une fonction à lancer ?
              0
              1. Sous Unix
                0
                1. Modérateur
                  Quel shell ?
                  0
              2. Modérateur
                Salut,

                Quel shell ? Quel système ?
                0