#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