Comando tr para Linux
El comando tr de Linux se utiliza para transformar caracteres en un flujo de texto. Cuando hacemos uso de tr estamos haciendo referencia a la palabra translate que significa traducir.
tr [opciones] caracteres_entrada caracteres_salida
Vamos a ver el primer ejemplo del comando tr para Linux sin hacer uso de opciones. En el texto «Hola mundo» transformaremos las letras o en números cero 0.
echo "Hola mundo" | tr 'o' '0'
Recuerda que el comando tr se usa principalmente para la transformación de caracteres, no está recomendado si necesitas transformar textos complejos. Casi siempre utilizado en combinación con otros comandos y en canalizaciones piping.
Podemos generar un flujo de código haciendo uso del comando ls -la y modificar todos los guiones por asteriscos.
ls -la | tr '-' '*'

Transformación de caracteres con tr
Cuando estamos trabajando con el comando tr podemos hacer transformaciones de un conjunto de caracteres por otro diferente.
ls -la | tr 'rwx-' 'abc^'
Modificaremos todas las apariciones de los caracteres de los permisos rwx- por los caracteres abc^.

Transformación haciendo uso de rangos con tr
Podemos especificar rangos de caracteres para realizar la transformación.
Algunos ejemplos de rangos:
- a-z → Todas las letras minúsculas del alfabeto.
- A-Z → Todas las letras mayúsculas del alfabeto.
- 0-9 → Todos los números del 0 al 9.
- a-zA-Z0-9 → Todas las letras y números.
- a-f → Letras desde la a hasta la f.
- 4-9 → Números desde el 4 hasta el 9.
Para ver un ejemplo usando los rangos con el comando tr de Linux usaremos el comando cat de Linux.
Modificaremos (transformando en mayúsculas) todas las letras incluidas en el fichero de texto hola.txt que estén dentro del rango a-f.
cat hola.txt | tr 'a-f' 'A-F'

De forma parecida podríamos modificar nuestro texto realizando un cifrado César, que consiste en reemplazar cada una de las letras de nuestro texto por otra que esté en un número de posiciones más adelante en el alfabeto.
Utilizaremos el típico de tres posiciones, reemplazando cada letra por la correspondiente a su posición más tres.
- ‘a-z’ ‘d-za-c’
echo "este es el mensaje" | tr 'a-z' 'd-za-c'
hvwr hv xq phqvdmh
Si quisiéramos reemplazar por la letra correspondiente a su posición real más cinco lo haríamos de la siguiente forma.
- ‘a-z’ ‘f-za-e’
echo "este es el mensaje" | tr 'a-z' 'f-za-e'
jxyj jx jq rjsxfoj

Opciones para tr en Bash
De la misma forma que con el resto de comandos de Linux podemos hacer uso de las opciones, éstas agregan un gran potencial al comando con el que estemos trabajando.
Vamos a ver algunas opciones del comando tr:
- -d → Elimina los caracteres que le indiquemos.
echo "este es el mensaje" | tr -d 'e'
st s l mnsaj
- -c → Complementa el conjunto de caracteres realizando la transformación en los que no están en el conjunto especificado.
Vamos a especificar un conjunto de todas las letras que aparecen en «este es el mensaje» excepto la letra e. Le indicaremos que cuando aparezca una letra que no sea alguna incluida en «sltmnaj » que la sustituya por el * asterisco.
echo "este es el mensaje" | tr -c 'sltmnaj' '*'
*st***s**l*m*nsaj**
- -s → Sustituye las repeticiones de un carácter por una única instancia del caracter.
echo "eeeste es el mensajeeee" | tr -s 'e'
este es el mensaje
echo "eeeste es el mmmmensaaajjjjjjeeee" | tr -s 'emaj'
este es el mensaje
