O cat
é um desperdício inútil de CPU, elimine-o. Envie a saída em vez de um arquivo temporário e renomeie o arquivo depois:
tr x y < input > input.tmp && mv input.tmp input
Com moreutils
instalado, isso pode ser feito com sponge
(que faz o arquivo temporário nos bastidores):
tr x y < input | sponge input
Observe que tais renomeações podem destruir os contextos de ACL ou de segurança sofisticados definidos no arquivo input
do original agora desvinculado.