Me gustaría reemplazar un conjunto de caracteres con los caracteres correspondientes de otro conjunto, algo como esto:
original set: ots
"target" set: u.x
foobartest → fuubar.ex.
Traducciones / transliteraciones como esta son la especialidad del tr
comando:
$ echo 'foobartest' | tr 'ots' 'u.x'
fuubar.ex.
Lamentablemente tr
no admite el cambio de archivos en el lugar como lo sed
hace.
Me gustaría usar sed
para no tener que reinventar la rueda de malabares con los archivos temporales.
tr
(correctamente) ignora la recursividad en los conjuntos de reemplazo: echo 'abc' | tr ab bx
→ bxc
. Una solución primitiva podría hacerlo xxc
porque vuelve a aplicar la traducción a los caracteres que ya se han traducido.
sed
contrario a GNU tr
puede transliterar caracteres de varios bytes)