Siempre he pensado que el comando tr eran las siglas de "transform" pero en realidad significa "translate". Este comando se utiliza para realizar traducciones simples pero útiles de un conjunto de caracteres a otro.

Este ingenioso comando se utiliza para traducir un tipo de caracteres a otro. Por ejemplo, si quieres convertir texto a mayúsculas o a minúsculas o traducir símbolos en espacios u otros caracteres.

El comando tr es lo suficientemente bueno para una traducción simple y rápida, pero no puede igualar al poder de los comandos awk o sed.

Funcionamiento del comando

El comando tr tiene la siguiente sintaxis:

tr [opciones] caracter1 [caracter2]

A continuación tenéis las opciones disponibles para el comando:

  • -d: Elimina los caracteres del primer conjunto
  • -c: Complemente el primer conjunto de caracteres, es decir, que solo trabaja en los caracteres que NO están en el primer conjunto
  • -s: Elimina múltiples apariciones adyancentes de los caracteres en el primer conjunto.
  • -t: Trunca el primer conjunto

Vamos a ver estas opciones en casos reales que se entenderá mucho mejor.

Convierte de mayúsculas a minúsculas y viceversa

Para hacer estas pruebas, utilizaremos una variable de entorno donde hemos guardado una frase, veamos que aparece en la variable con un echo:

# echo $TEXTO
voidnull es el mejor blog del mundo

Si queremos transformar esto en mayúsculas, entonces deberemos de usar tr de la siguiente forma:

# echo $TEXTO | tr 'a-z' 'A-Z'
VOIDNULL ES EL MEJOR BLOG DEL MUNDO

También se pueden usar clases de caracteres:

# echo $TEXTO | tr [:lower:] [:upper:]
VOIDNULL ES EL MEJOR BLOG DEL MUNDO

Para convertir el texto a minúsculas, sólo tienes que intercambiar los juegos de caracteres:

# echo $TEXTO | tr 'A-Z' 'a-z'

Reemplazar un conjunto de caracteres

Anteriormente hemos visto como transformar un texto de mayúsculas a minúsculas y viceversa. Ahora vamos a ver como cambiar solo un conjunto de caracteres.

Veamos el ejemplo:

# echo $TEXTO | tr "eo" "au"
vuidnull as al majur blug dal mundu

Lo que ha pasado en esta ocasiones, es que todas las "e" del texto se han transformado en "a" y todas las "o" en "u". ¿Que sucede si solo hay un carácter en el segundo conjunto? Pues que transformará todas las letras del primer conjunto a esa letra.

Por ejemplo, transformemos el texto en modo repipi:

# echo $TEXTO | tr "aeou" "i"
viidnill is il mijir blig dil mindi

Algo muy común en scripts escritos en bash, es traducir los guiones bajos en guiones, o los corchete en llaves, etc.

Eliminar caracteres específicos

Ahora toca cuando queremos eliminar ciertos caracteres, entonces deberemos de usar la opción -d:

# echo $TEXTO | tr -d "null"
void es e mejor bog de mdo

Si esperabas que solo eliminara el "null" de "voidnull" entonces estabas equivocado. El comando ha eliminado todas las "n", las "u" y las "l" de la frase. Si necesitas eliminar sólo "null" entonces deberás de usar el comando sed.

Elimina caracteres repetitivos

A veces hemos tenido que trabajar con textos que tienen múltiples espacios en la frase, por ejemplo esta:

"voidnull   es el mejor  blog del   mundo"

Si queremos eliminar los espacios extras, entonces podemos usar la opción múltiples:

# echo "voidnull   es el mejor  blog del   mundo" | tr -s " "
voidnull es el mejor blog del mundo

O si queremos cambiar los espacios por otro carácter:

# echo "voidnull   es el mejor  blog del   mundo" | tr -s " " "_"
voidnull_es_el_mejor_blog_del_mundo

Elimina todos los caracteres que no sean dígitos

Para eliminar todos los caracteres de una frase que no sean dígitos, podemos utilizar las opciones -c y -d y además utilizar clases de caracteres:

# echo "voidnull es el numero 1 de los 100 que que existen"  | tr -cd [:digit:]
1100

Y hasta aquí la explicación de este comando. Espero que este tutorial te haya resultado útil. No te olvides de suscribirte a nuestro boletín semanal y recibir consejos útiles sobre Linux en tu bandeja de entrada.


¿Buscas otro comando?

¡Revisa nuestro "Diccionario de comandos para GNU/Linux"!

Diccionario de comandos para GNU/Linux

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación