tr con Bash

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 '-' '*'
Haciendo uso del comando tr para sustituir los guiones por asteriscos en el flujo de texto que genera un ls -la

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

Haciendo uso del comando tr para sustituir un conjunto de caracteres por otro en el flujo de texto que genera un ls -la

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'
Haciendo uso del comando tr para sustituir un conjunto de caracteres por otro en un archivo de texto, modificando a-f por 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
Haciendo uso del comando tr para sustituir un conjunto de caracteres cambiando la posición de los caracteres

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
Haciendo uso del comando tr y las diferentes opciones -d -c y -s

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *