[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



Le 04/03/2020 à 23:35, Claude MICOUIN (via linux-31 Mailing List) a écrit :
Bonsoir la liste,
Je cherche à remplacer chaque lettre d'un fichier par leur numéro
d'ordre dans l'alphabet: 
a -> 1
b -> 2
etc.

Ça marche très bien jusqu'à 9 avec la commande tr
$ echo 'b f a i c h' |tr "[a-k]" "[0-9]"
1 5 0 8 2 7        

Mais ça se gâte dès qu'on arrive à un nombre à deux chiffres:
$ echo 'b f a i c h' |tr "[a-z]" "[0-26]"
1 ] 0 ] 2 ]

J'ai essayé de changer les " pour des ' dans tous les sens, aucun
résultat.
Quelqu'un saurait où ça foire ?
Merci.
Bonne soirée.
Claude MICOUIN

Bonsoir

tr remplace caractère par caractère, et il n'est donc pas capable de remplacer un caractère par un nombre à deux chiffres. Et lorsque tu écris 0-26 il comprend "0 à 2 et 6", soit 4 caractères. De plus les [] sont comptés comme des caractères comme les autres. Dans ton exemple il fait les remplacements suivants:

[ -> [
a -> 0
b -> 1
c -> 2
d -> 6
e -> ]
f -> ]
...
z -> ]

Les autres caractères ne seront pas remplacés. L'exemple suivant montre bien comment ça fonctionne:

echo "a b c d e f g h i j k l" |  tr "a-f" "0-26"
0 1 2 6 6 6 g h i j k l

Amicalement,

Emmanuel