OVH Cloud OVH Cloud

extraction de caractere dans une chaine de caracteres (bash)

1 réponse
Avatar
octane
Bonjour,

j'extrait des caracteres dans une chaine a l'aide de l'operateur echo
par exemple:
echo ${variable:5:2}

Mais maintenant, je souhaite extraire extraire un caractere sur 4
dans une chaine de caractere.

exemple: chaine "abcdefghijkl"
je ne veux garder que "dhl"

Y'a t'il un moyen en une commande, ou faut il passer par un script
qui boucle?

Merci

1 réponse

Avatar
Stephane Chazelas
On 10 Jul 2006 01:13:54 -0700, wrote:
[...]
j'extrait des caracteres dans une chaine a l'aide de l'operateur echo
par exemple:
echo ${variable:5:2}


echo n'extrait pas, c'est une commande qui sert a afficher ses
arguments apres avoir expander les "n" en newline, "t" en
tab... (sauf que pour bash, ca depend si le mode Unix a ete
active ou pas).

${variable:offset:length} est un operateur non-standard de ksh93
que bash a copié. Mal concu comme la plupart de ce qui vient de
ksh car ca se chevauche avec l'operateur ${var:-default}.

Mais maintenant, je souhaite extraire extraire un caractere sur 4
dans une chaine de caractere.

exemple: chaine "abcdefghijkl"
je ne veux garder que "dhl"

Y'a t'il un moyen en une commande, ou faut il passer par un script
qui boucle?
[...]


awk '
BEGIN {
string = ARGV[1]
len = length(string)
for (i = 1; i <= len; i += 4)
printf "%s", substr(string, i, 1)
printf "n"
exit
}' "$variable"


Ou, si $variable ne contient pas de saut de ligne (sinon, ca le
fera pour chaque ligne):

printf '%sn' "$variable" | sed 's/(.).{1,3}/1/g'

--
Stephane