Je voudrais remplacer un ensemble de caractères par des caractères correspondants d'un autre ensemble, quelque chose comme ceci:
original set: ots
"target" set: u.x
foobartest → fuubar.ex.
Les traductions / translittérations comme celle-ci sont la spécialité de la tr
commande:
$ echo 'foobartest' | tr 'ots' 'u.x'
fuubar.ex.
Malheureusement, tr
ne prend pas en charge la modification des fichiers sur place comme le sed
fait.
Je voudrais l'utiliser sed
pour ne pas avoir à réinventer la roue de jongler avec les fichiers temporaires.
tr
(correctement) ignore la récursivité dans les ensembles de remplacement: echo 'abc' | tr ab bx
→ bxc
. Une solution primitive pourrait supprimer cela xxc
car elle réapplique la traduction aux caractères qui ont déjà été traduits.
sed
contrairement à GNU tr
peut transliter des caractères multi-octets)