Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/02/2012, à 22:10

Xbabilone

couper une variable caractere

Bonjour a tous.
J'ai declaré une variable comme suit :$ mavar = "linux"
Et je voudrai retirer les deux premier caracteres pour me donner :

$ echo $mavar
$nux

Hors ligne

#2 Le 27/02/2012, à 22:17

sputnick

Re : couper une variable caractere

Salut :


$ mavar="linux"

$ echo ${mavar:2}
nux

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 27/02/2012, à 22:49

Zakhar

Re : couper une variable caractere

Ca c'est un "bashism" (c'est à dire ne marche que si tu utilises explicitement bash, qui, rappelons le, n'est plus le shell par défaut d'Ubuntu - c'est dash).

La preuve :

$ dash -c 'mavar="linux"; echo ${mavar:2}'
dash: Bad substitution

Donc si tu veux un truc portable, il faut utiliser quelque chose du genre :

$ mavar="Linux"; echo "$mavar" | cut -c3-nux
nux

Hélas, si tes chaînes en entrées sont UTF-8, cut ne supporte pas les caractères multi-bytes (on peut aussi utiliser head/tail avec --byte, et on a le même bug!).
Dans ce cas, le mieux que j'aie trouvé est de passer par un iconv en convertissant dans un jeu de caractère à longueur fixe comme UTF-16, et il faut bien sur alors multiplier les valeurs à "couper" par 2.

cututf8()
{
  local str="${1}"  
  local start=${2}
  local end=${3}

  printf '%s' "${str}" |\
    iconv -f utf-8 -t utf-16le |\
      head -c $(( ${end} * 2 )) |\
        tail -c $(( (${end} - ${start} + 1 ) * 2 )) |\
          iconv -f utf-16le -t utf-8
  
}

Cette fonction te coupera le 1er paramètre, entre le début indiqué en paramètre 2, et la fin indiquée en paramètre 3, même si la chaîne en entrée comporte des multi-bytes.

Donc ça donne un truc du genre :

cututf8 "$mavar" $debut $fin

et là tu as une chaîne bien découpée correctement.

Dernière modification par Zakhar (Le 27/02/2012, à 22:54)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#4 Le 28/02/2012, à 00:18

Xbabilone

Re : couper une variable caractere

Je suis impressionner par la reponse.

Et si je veux avoir les 2 derniers caracteres par exemple.  Je fais comment?

Dernière modification par Xbabilone (Le 28/02/2012, à 00:24)

Hors ligne

#5 Le 04/03/2012, à 17:05

Zakhar

Re : couper une variable caractere

Eh bien soit tu as de l'UTF-8 en entrée et tu utilises la fonction ci-dessus en ayant calculé préalablement la longueur de ta chaine en entrée.

Sinon, (ou si c'est de l'UTF-8 mais n'utilisant que l'ASCII 7) tu peux regarder tail qui fait ça très bien.

man tail

"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne