Accéder au contenu.
Menu Sympa

linux-31 - Re: [Linux-31] Remplacer des lettres par des nombres avec tr

Objet : Discussions sur le logiciel libre

Archives de la liste

Re: [Linux-31] Remplacer des lettres par des nombres avec tr


Chronologique Discussions 
  • From: jpcas <jpcas AT free.fr>
  • To: linux-31 AT culte.org
  • Subject: Re: [Linux-31] Remplacer des lettres par des nombres avec tr
  • Date: Sun, 8 Mar 2020 13:50:44 +0100

Salut,
Le 08/03/2020 à 12:44, Claude MICOUIN (via linux-31 Mailing List) a écrit :
>> L="${tab%${i}*}"
> Ici, on définit une variable L à partir des variable i et tab? L'idée
> est de garder la liste des premières lettres jusqu'à i-1 (par exemple
> pour r, on s'arrête à q), c'est bien ça ?

Exactement.

> Par contre, j'ai pas réussi à comprendre ça fonctionne dans le
> détail... (% n'a rien à voir avec modulo je suppose)
>

Voir la man bash au paragraphe "Remplacement des paramètre"

Cette commande devrait t'y amener directement :

man -P "less -p \"^ +Remplacement des paramètres\"" bash

Retrait du motif correspondant au préfixe (# et ##)
Retrait du motif correspondant au suffixe (% et %%)


>
>> R="${#L}"
> Ici, j'imagine qu'on compte le nombre de caractères. Mais comment?...
>

Toujours dans le man bash au paragraphe "Remplacement des paramètre"
Voir "Longueur du paramètre"
Ça compte tout simplement la longueur de la chaîne contenue dans la
variable.

>
>> ((R++))
> On rajoute un pour compenser le i-1
>> printf "${R} "
> Et ici on affiche le résultat.
>

C'est tout a fait ça ;-)

Par contre la seconde solution avec un tableau est beaucoup plus simple
et peut même prendre en compte la différence de casse.
Il suffit de changer la ligne :

printf "${array[${i}]} "

par :

printf "${array[${i,}]} "

La différence est subtile, la virgule après le "i" qui convertit
automatiquement une lettre majuscule en minuscule :

$ ./array.sh a Z z A M e E m
1 26 26 1 13 5 5 13

Bon dimanche.
@
JP



Archives gérées par MHonArc 2.6.19+.

Haut de le page