Gostaria de substituir um conjunto de caracteres pelos caracteres correspondentes de outro conjunto, algo como isto:
original set: ots
"target" set: u.x
foobartest → fuubar.ex.
Traduções / transliterações como esta são a especialidade do tr
comando:
$ echo 'foobartest' | tr 'ots' 'u.x'
fuubar.ex.
Infelizmente tr
, não suporta a alteração de arquivos no local, como o sed
faz.
Gostaria de usar sed
para não precisar reinventar a roda de arquivos temporários de malabarismo.
tr
(corretamente) ignora a recursão nos conjuntos de substituição: echo 'abc' | tr ab bx
→ bxc
. Uma solução primitiva pode ocultar isso xxc
porque reaplicará a tradução a caracteres que já foram traduzidos.
sed
contrário ao GNU tr
transliteramos caracteres multi-byte)