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.
Comentarios